自己的题解略混乱(再看自己都没看懂)所以还是贴一个神犇的讲解(十分简单易懂)
题目大意:
人有三个生理周期,给出三个周期的初始日期,请求出多少天后三个生理周期同时出现。
体力周期–23天
感情周期–28天
智力周期–33天
首先解释中国剩余定理这个神奇的东西 >o<
先来一个典型例题—-伟大的韩信点兵创造了这道题目 >o<
韩信点兵,三三余二,五五余三,七七余二。
设共有n个人(n为符合条件的最小数)
n%3=2;
n%5=3;
n%7=2;
首先求满足n%3=2的数
设a%3=1
于是a=4
易证a*2%3=2,so a*2=x;
所以
3*5*x%7=1
a=3*5*x
5*7*y%3=1
3*7*z%5=1
b c同上
so n=(a*7+b*3+c*5)%lcm(3,7,5)
此题同理
求(n+d)%23=p;
(n+d)%28=e;
(n+d)%33=i;
求n
#include<iostream>// 中国剩余定理
#include<cstdio>
using namespace std;//p--体力周期23;e--感情周期28;i--智力周期33;
int main(){
int p,e,i,d,cnt=0;
//23*28*2=1288
//23*33*19=14421
//28*33*6=5544
while(scanf("%d%d%d%d",&p,&e,&i,&d)){
if(p==-1&&e==-1&&i==-1&&d==-1)
break;
cnt++;
int ans;
ans=((1288*i+14421*e+5544*p)+21252-d)%(23*28*33);//因为可能出现负数,所以要加上21252
if(ans==0)
ans=21252;
cout<<"Case "<<cnt<<": the next triple peak occurs in "<<ans<<" days."<<endl;
}
return 0;
}