您的位置:首页 > 其它

中国剩余定理概念及模板解释

2016-07-18 17:16 537 查看
1,中国剩余定理的概念



定义正如上图这个同余方程组;求解x;

并且m1,m2,……..mn都是互质的正整数;

其中x是他们唯一的解;

2;应用;



a恒等于b(mod m)表示a,b对于模m同余;

3;模板解释;

poj1006Biorhythms

链接;http://poj.org/problem?id=1006

就该题而言;

m1=23;

m2=28;

m3=33;

三者互质则适合中国剩余定理;则有

M1 = 28*23=924;

M2=23*33=759;

M3=23*28=644;

Ai * Mi恒等于 1(mod mi);i表示1,2,3;

<为什么要取1>;

是为了要求余数23的话,只要乘以23就可以,要求余数为28的话,只要乘以28就可以!利用这个来循环求解Ai;

for(i = 1; i < 23; i++){
if((m1*i)%23==1){
t1 = i;
break;
}
}


利用循环求Ai;

最后的结果就是;

x恒等于M1A1c1+M2A2c2+M3A3c(modM);

#include<stdio.h>
int main()
{
int p, e, i, d, k, m1, m2, m3, t1=0, t2=0,t3=0,x;
k =0;
m1 = 924;
m2 = 759;
m3 = 644;
for(i = 1; i < 23; i++){ if((m1*i)%23==1){ t1 = i; break; } }
for(i = 1; i < 28; i++){
if((m2*i)%28==1){
t2 = i;
break;
}
}
for(i = 1; i < 33; i++){
if((m3*i)%33==1){
t3 = i;
break;
}
}
//printf("%d %d %d\n",t1,t2,t3);
while(scanf("%d %d %d %d",&p,&e, &i, &d) != EOF){
k++;
if(p == -1 && e == -1 && i == -1 && d == -1){
break;
}
x = 924*t1*p+759*t2*e+644*t3*i; x = (x-d+21252)%21252; if(x == 0){ x = 21252; }
printf("Case %d: the next triple peak occurs in %d days.\n",k, x);
}

return 0 ;
}


就这题而言,x是有范围的,因此要这样;

x = 924*t1*p+759*t2*e+644*t3*i;
x = (x-d+21252)%21252;
if(x == 0){
x = 21252;
}


该篇博客理解的关键在于第二附图的理解;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  中国剩余定理