POJ 2891

x=r1 (mod a1)

x=r2 (mod a2)

x=a1*x+r1,x=a2*y+r2;

a1*x-a2*y=r2-r1;

 1 #include <cstdio>
2 #define LL long long
3 LL a1,a2,r1,r2,x,y,n;
4 LL Extend_Gcd(LL a,LL b,LL &x,LL &y)
5 {
6     if (b==0) {x=1,y=0; return a;}
7     LL Ret=Extend_Gcd(b,a%b,x,y);
8     LL Tmp=x;
9     x=y; y=(Tmp-a/b*y);
10     return Ret;
11 }
12 int main()
13 {
14     // freopen("c.in","r",stdin);
15     while (scanf("%lld",&n)!=EOF)
16     {
17         scanf("%lld%lld",&a1,&r1); bool Ok=true;
18         for (LL i=1;i<n;i++)
19         {
20             scanf("%lld%lld",&a2,&r2);
21             LL a=a1,b=a2,m=r2-r1;
22             LL d=Extend_Gcd(a,b,x,y);
23             if (m%d) Ok=false;
24             x=(((x*m/d))%(b/d)+(b/d))%(b/d);
25             r1=x*a1+r1;
26             a1=(a1*a2)/d;
27         }
28         if (Ok) printf("%lld\n",r1); else puts("-1");
29     }
30     return 0;
31 }
POJ 2891

POJ 2407 欧拉函数

 1 #include <cstdio>
2 int n;
3 int main()
4 {
5     while (scanf("%d",&n)!=EOF)
6     {
7         if (n==0) break;
8         int Ans=1; int Tmp=n;
9         for (int i=2;i*i<=Tmp;i++)
10             if (n%i==0)
11             {
12                 Ans=Ans*(i-1);
13                 n=n/i;
14                 while (n%i==0) Ans=Ans*i,n=n/i;
15             }
16         if (n>1) Ans=Ans*(n-1);
17         printf("%d\n",Ans);
18     }
19     return 0;
20 }
POJ 2407