• POJ1006Biorhythms——中国剩余定理


    题目:http://poj.org/problem?id=1006

    用扩展欧几里得算法求逆元,使用中国剩余定理;

    本题较简单,可以手算直接写出,不过我仍使用了模板。

    代码如下:

    #include<iostream>
    #include<cstdio>
    using namespace std;
    int r[5],st,a[5],s,x,y,t;//r为余数,a为除数
    int exgcd(int a,int b,int &x,int &y)
    {
    	if(b==0)
    	{
    		x=1;y=0;
    		return a;//最大公因数 
    	}
    	int gcd=exgcd(b,a%b,x,y);
    	int t=x;
    	x=y;
    	y=t-a/b*y;
    	return gcd;
    }
    int main()
    {
    	a[1]=23;a[2]=28;a[3]=33;
    	int n=23*28*33;
    	while(1)
    	{
    		x=0;y=0;s=0;
    		for(int i=1;i<=3;i++)
    			scanf("%d",&r[i]);
    		scanf("%d",&st);
    		if(r[1]==-1&&r[2]==-1&&r[3]==-1&&st==-1)return 0;
    		for(int i=1;i<=3;i++)
    		{
    			int m=n/a[i];
    			exgcd(m,a[i],x,y);//x为逆元 
    			s=(s+x*m*r[i])%n;
    			printf("x=%d s=%d\n",x,s);
    		}
    		s-=st;
    		if(s<0||s==0)s+=n;
    		t++;
    		printf("Case %d: the next triple peak occurs in %d days.\n",t,s);
    	}
    	return 0;
    }
    

      

  • 相关阅读:
    从Python到Web开发
    源码安装缺少configure文件
    5
    4
    3
    2
    42
    1
    18
    41
  • 原文地址:https://www.cnblogs.com/Zinn/p/8206187.html
Copyright © 2020-2023  润新知