莫拉萊斯的矩陣難題
problem:d
time limit:1000ms
memory limit:65535k
description
莫拉萊斯見到了乙個數陣:
他覺得這個數陣似曾相識(如果你不覺得或者沒有找到規律,請注意觀察相鄰兩行),於是有了乙個新想法:建立乙個新的數陣,在第一層有且僅有乙個初始資料q,按照 類似於 上圖的數陣的規律為接下來的幾層構造資料,但是,不同的是,莫拉萊斯規定奇數層遵循規律a,偶數層遵循規律b。
莫拉萊斯決定將這個數陣稱為「公尺格災厄陣」,下面是初始資料為1時所呈現的部分公尺格災厄陣:
莫拉萊斯想請你幫他計算一下在第i層中某個數有多少個(假定初始資料所在層數為第一層)。
約定所有資料均為整數,1輸出一行,僅有乙個整數,表示在第i層中x的數量。
由於輸出資料較大,請將輸出資料對20200501取模的結果。
sample input
樣例輸入1:2 2 2
樣例輸入2:2 14 5
sample output
樣例輸出1:1
樣例輸出2:12
hint
對於樣例1的說明:
構造出的公尺格災厄陣的前兩層為
21 2
所以第2層中2的數量為1。
;//矩陣f
const
long
long start[4]
[4]=
,,,}
;//矩陣a
const
long
long _01[4]
[4]=
,,,}
;//矩陣的0次方
class
node
node
(const
long
long a[4]
[4])
;friend node operator*(
const node &x,
const node &y)
node operator%(
long
long mod)
}task
(pows),st
(start)
;const node zero
(_01)
;node pow
(node a,
long
long b,
long
long mod)
intmain
(void)if
(c ==7)
printf
("%lld"
, ans % mod)
;return0;
}
尤拉篩 尤拉函式 莫比烏斯函式
通過已知素數及當前自然數篩掉後面的合數。同時讓每乙個合數只被篩去一次,摒棄重複的篩除操作。兩個陣列 乙個vis,乙個prime。迴圈從2開始,直到所給的上限n處 或者直接maxn 無論當前數是否是質數,都要進行後續合數的處理!篩除時要利用已有的素數。素數規模 趨近於xln x displaystyl...
尤拉函式和莫比烏斯反演(Mobius)
這幾天研究了之前一直困擾自己很久的莫比烏斯反演,雖然自己現在學的還不是很好,就簡簡單單的寫一下總結吧,咦,都沒學會掌握我就寫總結好像很欠揍,尤拉函式現在也系統的整理一下好了 1.定義 在數論,對正整數n,尤拉函式是小於n的正整數中與n互質的數的數目 1 1 此函式以其首名研究者尤拉命名 euler ...
線性篩素數 尤拉函式 莫比烏斯函式
常用的兩種素數篩法見部落格 http 這裡詳講線性篩,演算法複雜度o n 這個演算法的核心思想是 每乙個合數可以被唯一地表示成它的乙個最小質因子和另外乙個數的乘積。證明略。先上 const int n 1000000 int phi n prime n mu n bool vis n void in...