当前位置:文档之家› 中国剩余定理PPT课件

中国剩余定理PPT课件



while(scanf("%d%d%d%d",&p,&e,&i,&d)==4 && !(p==-1 && e==-1 && i==-1 && d==-1)){

j++;

k=(i*a+p*b+e*c-d+21252)%(23*28*33);

if(k>0)

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

else

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

}

return 0;
}
改进版:PKU1006
#include<iostream>
using namespace std;
int main(){来自其实,这就是享誉中外的《中国剩余定理》。
一、剩余问题

在整数除法里,一个数同时除以几
个数,整数商后,均有剩余;已知各除数
及其对应的余数,从而要求出适合条件的
这个被除数的问题,叫做剩余问题。
古代人的解法:
凡三三数之剩一,则置七十;五五数之剩 一,则置二十一;七七数之剩一则置十五; 一百六以上,以一百零五减之即得。
以上是韩信点兵的故事,就要确定K值了。
另外一种解法: 用枚举筛选法解 按除数3,7同余2,依次逐一枚举;随后用
除以5余3,进行筛选,便可获解。
摘录条件

3......2
(基准数) ÷ 2
5……3
同余

7......2
(一)求3和7的最小公倍数[3,7] =21
(二)进行枚举筛选
5整除。
一些关于中国剩余定理的定理:
定理2:二数不能整除,若被除数扩大(或 缩小)了几倍,而除数不变,则其余数也
同时扩大(或缩小)相同的倍数(余数必
小于除数)。
如:22÷7=3……1

(22×4)÷7=12……1×4(=4)

(要余2即 22×2÷7=6……2)

(22×9)÷7=28……1×9-7(=
}

for(j=1;;j++){

if(28*33*j%23==1){

b=28*33*j;

break;

}

}

for(j=1;;j++){

if(23*33*j%28==1){

c=23*33*j;

break;

}

}

j=0;

printf("a=%d\tb=%d\tc=%d\n",a,b,c);

(1)21+2=23
4……3
23÷5=
SUCCESS
THANK YOU
2019/7/30
可编辑
由此可以过一题:pku1006
/JudgeOnline/problem?i d=1006
题目大意: 人的身体,情感,智力的高峰低谷都由周期,分
别是23天,28天和33天,现在给出身体,情感, 智力的起始天,请计算由此天开始的第几天会达 到三个方便的峰值,输出此峰值。 思路: 运用中国剩余定理解得基准数,次数再减去起始 天D,再加上23,28,33的最小公倍数21252,其 值就是答案。
第三步:
求各基础数的和

35+63+30=128
第四步:
求基准数(最小的,只有一个)

128-105=23
第五步:
求适合条件的数X

X=23+105K(K是整数)
这个步骤让我想起了韩信点兵:
传说西汉大将韩信,由于比较年轻,开始他的部 下对他不很佩服。有一次阅兵时,韩信要求士兵 分三路纵队,结果末尾多2人,改成五路纵队,结 果末尾多3人,再改成七路纵队,结果又余下2人, 后来下级军官向他报告共有士兵2395人,韩信立 即笑笑说不对(因2395除以3余数是1,不是2), 由于已经知道士兵总人数在2300?/FONT>2400之间, 所以韩信根据23,128,233,------,每相邻两 数的间隔是105,便立即说出实际人数应是2333人 (因2333=128+20χ105+105,它除以3余2,除以5 余3,除以7余2)。这样使下级军官十分敬佩,这

int i,p,e,d,k,j=0;

while(scanf("%d%d%d%d",&p,&e,&i,&d) && !(p==-1 && i==-1 &&
e==-1 && d==-1)){
中国剩余定理
扩展欧几里德定理
看过《射雕英雄传》的同学应该记得,当年黄蓉身中奇毒, 郭靖将她送到瑛姑那里救治,进入瑛姑茅舍,瑛姑就给他 们出了一题:
“今有物不知其数,三三数之剩二;五五数 之剩三:七七数之剩二。问物几何?”
黄蓉天资聪慧,哪里难得住她,她略微思考,答:23。
大家是不是很好奇,黄蓉是怎么解出这道 题的呢?
依定理译成算式解为:

70×2+21×3+15×2=233

233-105×2=23
一些关于中国剩余定理的定理:
定理1:几个数相加,如果只有一个加数, 不能被数a整除,而其他加数均能被数a整 除,那么它们的和,就不能被数a整除。

如:10能被5整除,15能被5整除,
但7不能被5整除,所以(10+15+7)不能被
2)

(想余5则22×5÷7=15……5)
现在人的解法:
用各除数的“基础数”法解。
基础数的条件:
(1)此数必须符合除数自身的余数条件; (2)此数必须是其他所有各除数的公倍数。
第一步:
求各除数的最小公倍数

[3,5,7]=105
第二步: 求各除数的基础数
(1)[3] 105÷3=35 [35]÷3=11……2 (2)[5] 105 ÷ 5=21 21÷5=4……1(当于3) ∵1×3=3 21×3=[63] (3)[7] 105 ÷ 7=15 15 ÷ 7=2……1(当于2) ∵1×2=2 ∴15×2=[30]
代码:PKU1006
#include<iostream>
using namespace std;
int main(){

int p,e,i,d,j,k,a=1,b=1,c=1;

for(j=1;;j++){

if(23*28*j%33==1){

a=23*28*j; break;

}

相关主题