1141ios
愈來愈喜歡數論了 頗有意思web
先看個RSA的介紹算法
1 #include <iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<algorithm> 5 #include<stdlib.h> 6 using namespace std; 7 #define N 32000 8 #define LL long long 9 int p[N+10],f[N+10],g; 10 void init() 11 { 12 int i,j; 13 for(i = 2; i < N ; i++) 14 { 15 if(!f[i]) 16 for(j = i+i ; j < N ; j+=i) 17 f[j] = 1; 18 } 19 for(i = 2; i < N ; i++) 20 if(!f[i]) 21 p[++g] = i; 22 } 23 void exgcd(int a,int b,int &x,int &y) 24 { 25 if(b==0) 26 { 27 x=1;y=0;return ; 28 } 29 exgcd(b,a%b,x,y); 30 int t = x; 31 x = y; 32 y = t-a/b*y; 33 } 34 LL expmod(int a,int b,int mod) 35 { 36 LL t; 37 if(b==0) return 1%mod; 38 if(b==1) return a%mod; 39 t = expmod(a,b/2,mod); 40 t = t*t%mod; 41 if(b&1) t = t*a%mod; 42 return t; 43 } 44 int main() 45 { 46 int n,k,e,i,c,a,b,x,y; 47 init(); 48 cin>>k; 49 while(k--) 50 { 51 cin>>e>>n>>c; 52 for(i = 1 ; i <= g ; i++) 53 if(n%p[i]==0) 54 { 55 a = p[i]; 56 b = n/p[i]; 57 } 58 int o = (a-1)*(b-1); 59 exgcd(e,o,x,y); 60 x = x<0?x+e*o:x; 61 LL ans = expmod(c,x,n); 62 cout<<ans<<endl; 63 } 64 return 0; 65 }