Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
用这个方法过了 不过用逆元怎么都过不了 与AC的程序测了无数组数据 都没错啊 附上代码 忘大牛们指点In Reply To:计算((p^(eB+1)-1)/(p-1))%MOD Posted by:dirtysalt at 2009-09-04 15:32:53 #include <stdio.h> #define ll __int64 #define mod 9901 ll expmod(ll a,ll b) // a^b(mod 9901) { if( b==0 ) return 1; ll k = expmod(a,b/2); if( b&1 ) return (k*k*a)%mod; else return (k*k)%mod; } ll gcd(ll e,ll f) // e关于f逆元 { ll x1,x2,x3,y1,y2,y3; ll t1,t2,t3; x1 = 1,x2 = 0,x3 = f; y1 = 0,y2 = 1,y3 = e; while( 1 ) { if( y3==0 ) return -1; if( y3==1 ) return y2; ll k = x3/y3; t1 = x1-k*y1;t2 = x2-k*y2;t3 = x3-k*y3; x1 = y1,x2 = y2,x3 = y3; y1 = t1,y2 = t2,y3 = t3; } } ll getA(ll p,ll a,ll b) // (p^(a*b+1)-1)/(p-1)%9901 { ll k = expmod(p%mod,a*b+1); k = (k-1+mod)%mod; ll x = gcd(p-1,mod); if( x<0 ) x += mod; k *= x; return k%mod; } main() { ll a,b; while( scanf("%I64d%I64d",&a,&b)!=EOF ) { ll as = 1; for(ll i=2;i*i<=a;i++) { ll k = 0; while( a%i==0 ) k++,a /= i; if( k!=0 ) as *= getA(i,k,b),as %= mod; } if( a==0 && b!=0 ) printf("0\n"); else { if( a!=1 ) as *= getA(a,1,b); as %= mod; printf("%I64d\n",as); } } } Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator