| ||||||||||
| 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 | |||||||||
我的代码 哪里错了吗? 一直狂WAIn Reply To:WA到不行... Posted by:enter2004 at 2007-09-18 23:14:32 我先把N分解 算出T = (p-1)*(q-1)
然后 使用扩展欧基理得 算出 E在模T下的的逆元 得到D
最后 我计算 C^D mod N 得到答案
but WA了一整天...
是不是有overflow?? 但我也考虑了
#include <iostream>
using namespace std;
__int64 gcd(__int64 a , __int64 b)
{
if( b ) while( (a%=b) && (b%=a) );
return a+b;
}
__int64 mulmod( __int64 u , __int64 v , __int64 z )
{
if( v==1 ) return u%z;
if( u==0 || v==0 ) return 0;
return (((mulmod(u,v/2,z)*2)%z)+(mulmod(u,v%2,z)%z))%z;
}
__int64 pow_mod(__int64 a, __int64 p, __int64 n)
{
__int64 k = 1;
while(p > 1)
{
if(p&1) k = mulmod(k, a, n);
a = mulmod(a, a, n); p >>= 1;
}
return mulmod(k, a, n);
}
__int64 myabs( __int64 x )
{
return x>=0?x:(-x);
}
__int64 random(){
__int64 a;
a = rand();
a *= rand();
a *= rand();
return a;
}
#define MAX 500
__int64 zz;
__int64 f(__int64 x){
return mulmod(x,x,zz)+1;
}
__int64 small( __int64 x )
{
__int64 i;
for( i=2;i<64&& i<x;i++)
if( x%i==0 ) return i;
return 0;
}
__int64 pollard(__int64 n){
__int64 i, p, x,xx;
__int64 tmp;
tmp = small(n);
if( tmp ) return tmp;
zz = n;
for(i=1;i<MAX;i++){
x = i;
xx = f(x)%n;
p = gcd((xx-x+n)%n,n);
while(p==1){
x = f(x)%n;
xx = f( f(xx)%n )%n;
p = gcd( (xx-x+n)%n,n)%n;
}
if(p==0)continue ;
else return p;
}
return -1;
}
__int64 egcd( __int64 a , __int64 b )
{
__int64 x=0,y=1;
__int64 lastx=1,lasty=0;
__int64 tmp,q;
while( b!=0 ){
tmp = b;
q = a/b;
b = a%b;
a = tmp;
tmp = x;
x = lastx-q*x;
lastx = tmp;
tmp = y;
y = lasty-q*y;
lasty = tmp;
}
return lastx;
}
int main()
{
__int64 C,E,N,T,D,z,ans;
while( cin >>C>>E>>N ){
z = pollard(N);
T = (z-1)*(N/z-1);
D = egcd(E,T);
ans = pow_mod(C,D,N);
cout << ans << endl;
}
return 0;
}
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator