hdu 3304 Interesting Yang Yui Triangle
hdu 3304 Interesting Yang Yui Triangle
題意:
給出P,N,問第N行的斐波那契數模P不等於0的有多少個?
限制:
P < 1000,N <= 10^9
思路:
lucas定理,
如果:
n = a[k]*p^k + a[k-1]*p^(k-1) + ... + a[1]*p + a[0]
m = b[k]*p^k + b[k-1]*p^(k-1) + ... + b[1]*p + b[0]
則:
C(n,m) = pe(i=0~k,C(a[i],b[i]))%p 其中pe表示連乘符號。
由於n已經確定,所以a[i] (0 <= i <= k)已經確定,所以我們只需要找出每個a[i]有多少種b[i],使得C(a[i],b[i])%P!=0,暴力一遍就可以了。
/*hdu 3304 Interesting Yang Yui Triangle
題意:
給出P,N,問第N行的斐波那契數模P不等於0的有多少個?
限制:
P < 1000,N <= 10^9
思路:
lucas定理,
如果:
n = a[k]*p^k + a[k-1]*p^(k-1) + ... + a[1]*p + a[0]
m = b[k]*p^k + b[k-1]*p^(k-1) + ... + b[1]*p + b[0]
則:
C(n,m) = pe(i=0~k,C(a[i],b[i]))%p 其中pe表示連乘符號。
由於n已經確定,所以a[i] (0 <= i <= k)已經確定,所以我們只需要找出每個a[i]有多少種b[i],使得C(a[i],b[i])%P!=0,暴力一遍就可以了。
*/
#include
#include
using namespace std;
#define LL long long
const int MOD=10000;
const int N=105;
int a[N];
int cnt=0;
int ny[N];
LL inv(LL a,LL m){
LL p=1,q=0,b=m,c,d;
while(b>0){
c=a/b;
d=a; a=b; b=d%b;
d=p; p=q; q=d-c*q;
}
return p<0?p+m:p;
}
void predo(int p){
ny[0]=1;
for(int i=1;i