POJ1006 - Biorhythms(中国剩余定理)

题目大意

略。。。有中文。。。

题解

就是解同余方程组

x≡(p-d)(mod 23)

x≡(e-d)(mod 28)

x≡(i-d)(mod 33)

最简单的中国剩余定理应用。。。。

代码:

#include<iostream>

#include<cstdio>

using namespace std;

void gcd(int a,int b,int &d,int &x,int &y)

{

    if(!b)

    {

        d=a,x=1,y=0;

    }

    else

    {

        gcd(b,a%b,d,y,x),y-=x*(a/b);

    }

}

int main()

{

    int p,e,d,i,a1,a2,a3,M1,M2,M3,t=0;

    while(cin>>p>>e>>i>>d&&p+e+i+d>=0)

    {

        int x=0,y,q;

        a1=p-d,a2=e-d,a3=i-d;

        M1=924,M2=759,M3=644;

        gcd(23,M1,q,q,y),x=(x+y*M1*a1)%21252;

        gcd(28,M2,q,q,y),x=(x+y*M2*a2)%21252;

        gcd(33,M3,q,q,y),x=(x+y*M3*a3)%21252;

        x=(x%21252+21252)%21252,x=x?x:21252;

        printf("Case %d: the next triple peak occurs in %d days.\n",++t,x);

    }

    return 0;

}

你可能感兴趣的:(poj)