一些关于GCD的代码。。。。
1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 5 using namespace std; 6 7 typedef long long int LL; 8 9 LL EX_GCD(LL a,LL b,LL& x,LL& y) 10 { 11 if(b==0) 12 { 13 x=1;y=0; 14 return a; 15 } 16 else 17 { 18 LL ret=EX_GCD(b,a%b,x,y); 19 int t=x; 20 x=y; y=t-a/b*y; 21 return ret; 22 } 23 } 24 25 LL inv(int a,int n) 26 { 27 LL x,y,d; 28 d=EX_GCD(a,n,x,y); 29 if(d==1) 30 return (x%n+n)%n; 31 else 32 return -1; 33 } 34 35 LL euler_phi(int n) 36 { 37 LL ans=n; 38 for(int i=2;i*i<=n;i++) 39 { 40 if(n%i==0) 41 { 42 ans=ans/i*(i-1); 43 while(n%i==0) n/=i; 44 } 45 } 46 if(n>1) 47 ans=ans/n*(n-1); 48 return ans; 49 } 50 51 LL phi[120]; 52 53 LL table_euler_phi(int n) 54 { 55 memset(phi,0,sizeof(phi)); 56 phi[1]=1; 57 for(int i=2;i<=n;i++) 58 { 59 if(!phi[i]) 60 for(int j=i;j<=n;j+=i) 61 { 62 if(!phi[j]) phi[j]=j; 63 phi[j]=phi[j]/i*(i-1); 64 } 65 } 66 } 67 68 int a[100],m[100]; 69 70 LL china(int n,int a[],int m[]) 71 { 72 LL ans=0,x,y,M=1; 73 for(int i=0;i<n;i++) M*=m[i]; 74 for(int i=0;i<n;i++) 75 { 76 LL w=M/m[i]; 77 EX_GCD(w,m[i],x,y); 78 ans=(ans+(w*x*a[i])%M)%M; 79 } 80 return (ans+M)%M; 81 } 82 83 int main() 84 { 85 return 0; 86 }