POJ 1006 Biorhythms .
2016-08-07 17:04
330 查看
裸的中国剩余定理
求三个数的周期就是求他们的最小倍数
而且这三个数正好互素,所以肯定是中国剩余定理
#include<iostream>
using namespace std;
int gcdEx(int a,int b,int& x,int& y)
{ //求ax+by=gcd(a,b) 的整数解 返回gcd(a,b);
if(b==0) {
x=1; y=0; return a;
}
int x1,y1;
int gcd=gcdEx(b,a%b,x1,y1);
x=y1;
y=x1-a/b*y1;
return gcd;
}
int n0;
int CRT(int* a,int* n,int k)
{ //a[i]表示第i个余数,n[i]表示第i个除数,一共有k个数,返回x值
n0=1;
for(int i=0;i<k;i++) n0*=n[i]; //n0=n1*n2....*nk;
int ans=0,x,y,m;
for(int i=0;i<k;i++)
{
m=n0/n[i];
gcdEx(m,n[i],x,y);
ans=(ans+a[i]*x*m)%n0;
}
if(ans<0) ans+=n0;
return ans;
}
int main()
{
int a[3],day,kase=0;
int n[3]={23,28,33};
while(cin>>a[0]>>a[1]>>a[2]>>day&&a[0]!=-1)
{
int ans=CRT(a,n,3)-day;
if(ans<=0) ans+=n0;
cout<<"Case "<<++kase<<": the next triple peak occurs in "<<ans<<" days."<<endl;
}
return 0;
}
求三个数的周期就是求他们的最小倍数
而且这三个数正好互素,所以肯定是中国剩余定理
#include<iostream>
using namespace std;
int gcdEx(int a,int b,int& x,int& y)
{ //求ax+by=gcd(a,b) 的整数解 返回gcd(a,b);
if(b==0) {
x=1; y=0; return a;
}
int x1,y1;
int gcd=gcdEx(b,a%b,x1,y1);
x=y1;
y=x1-a/b*y1;
return gcd;
}
int n0;
int CRT(int* a,int* n,int k)
{ //a[i]表示第i个余数,n[i]表示第i个除数,一共有k个数,返回x值
n0=1;
for(int i=0;i<k;i++) n0*=n[i]; //n0=n1*n2....*nk;
int ans=0,x,y,m;
for(int i=0;i<k;i++)
{
m=n0/n[i];
gcdEx(m,n[i],x,y);
ans=(ans+a[i]*x*m)%n0;
}
if(ans<0) ans+=n0;
return ans;
}
int main()
{
int a[3],day,kase=0;
int n[3]={23,28,33};
while(cin>>a[0]>>a[1]>>a[2]>>day&&a[0]!=-1)
{
int ans=CRT(a,n,3)-day;
if(ans<=0) ans+=n0;
cout<<"Case "<<++kase<<": the next triple peak occurs in "<<ans<<" days."<<endl;
}
return 0;
}
相关文章推荐
- 读写SD卡上的文件
- 【42】和为S的两个数字
- HDU 1008 Elevator(水题)
- 利用Camera和Matrix实现有趣的卡片效果
- 利用Camera和Matrix实现有趣的卡片效果
- CentOS基础命令大全
- JAVA NIO
- 关于C的一些变量关系的杂谈 (编译 作用域 extern)
- Drupal7函数之drupal_page_is_cacheable()
- UML图
- WPFheader赋值
- 16个Linux服务器监控命令
- cf455a(简单dp)
- 栈和队列&前缀,中缀,后缀
- 线段树 1
- JVM
- 排序算法——快速排序
- 基于hadoop的BI架构
- java英语带(带音标)
- 基于hadoop的BI架构