第一行乙個正整數,表示資料組資料 ,接下來t行
每行三個正整數n,k,p
t行,每行輸出乙個整數,表示結果
11 2 3
1題解:首先看到斐波那契數列我們肯定要想到矩陣乘法,但是給出的形式並不能直接求,我們試圖將其轉化為矩乘的形式。
如果不考慮k的話,我們可以設a表示斐波那契數列的轉移矩陣,然後套用二項式定理(這顯然對矩陣運算成立),得到$ans=(i+a)^n$。
如果考慮k的限制呢?所求的式子變成$\sum\limits_^n[k\mid i]c_n^if_i$。而題中保證p是質數且p%k=1,即(p-1)%k=0,p-1的出現暗示著我們可能要用到原根。
接下來就是最神的一步:設g是p的原根,$g^ k}=1$當且僅當$k\mid i$,所以令$w=g^ k}$,我們構造:$\sum\limits_^w^$,這個式子當$k\mid i$時=k,而當$k\nmid i$時,由等比數列求和可知該式=0。所以答案就可以表示成$\sum\limits_^\frac 1 k \sum\limits_^w^c_n^if_i$。
下一步也挺神的(其實應該是個我不知道的套路),我們希望對這個式子強行套用二項式定理,但是這個式子本身並不滿足二項式定理的形式,所以我們先列舉j,得到$\frac 1 k \sum\limits_^\sum\limits_^nw^c_n^if_i$。如果想套用二項式定理,我們需要式子中有乙個n-i,於是我們強行把$w^$變成$w^$,然後將$w^$提出來即可,最後的形式如下:
$\frac 1 k \sum\limits_^w^(w^i+a)^n$。
#include #include #include #include using namespace std;typedef long long ll;
ll n,k,p,ans,g,w;
int m;
ll pri[20];
struct m
ll * operator (const int &a)
m operator * (const m &a) const
}s,t;
inline ll pm(ll x,ll y)
return z;
}inline void pm(ll y)
}inline void work()
if(t>1) pri[++m]=t;
for(g=2;;g++)
w=pm(g,(p-1)/k);
for(i=0;i
printf("%lld\n",ans*pm(k,p-2)%p);
}int main()
//1 100000000000000000 15232 998244353
BZOJ3328 PYXFIB 單位根反演
傳送門 設 a begin1 1 1 0 end 那麼要求的相當於是 sum k i binoma i 求出其中的 a 即可 n mid k frac sum omega 證明 若 n k 那麼根據單位根的消去引理可以得到就是 1 否則,等比數列求和,發現分子為 0 所以帶入單位根 sum k i ...
BZOJ 2440 完全平方數
time limit 10 sec memory limit 128 mb submit 966 solved 457 submit status 小 x 自幼就很喜歡數。但奇怪的是,他十分討厭完全平方數。他覺得這些 數看起來很令人難受。由此,他也討厭所有是完全平方數的正整數倍的數。然而 這絲毫不影...
BZOJ2440 完全平方數
description 小 x 自幼就很喜歡數。但奇怪的是,他十分討厭完全平方數。他覺得這些 數看起來很令人難受。由此,他也討厭所有是完全平方數的正整數倍的數。然而 這絲毫不影響他對其他數的熱愛。這天是小x的生日,小 w 想送乙個數給他作為生日禮物。當然他不能送一 個小x討厭的數。他列出了所有小x不...