小墨在努力!!
吗了个b的。。。。。

中国古代求解一次同余式组(见同余)的方法。是数论中一个重要定理。又称中国剩余定理。公元前后的《孙子算经》中有“物不知数”问题:“今有物不知其数,三三数之余二 ,五五数之余三 ,七七数之余二,问物几何?”

      解法中的三个关键数70,21,15,有何妙用,有何性质呢?首先70是3除余1而5与7都除得尽的数,所以70a是3除余a,而5与7都除得尽的数,21是5除余1,而3与7都除得尽的数,所以21b是5除余b,而3与7除得尽的数。同理,15c是7除余c,3与5除得尽的数,总加起来 70a+21b+15c 是3除余a,5除余b ,7除余c的数,也就是可能答案之一,但可能不是最小的,这数加减105(105=3*5*7)仍有这样性质,可以多次减去105而得到最小的正数解。

 

  附:如70,其实是要找余2的,但只要找到了余1的再乘2即余二了。

 

  孙子问题的解法,以现代的说法,是找出三个关键数70,21,15。解法的意思就是用70乘3除所得的余数,21乘5除所得的余数,15乘7除所得的余数,然后总加起来,除以105的余数就是答案。

 

  即题目的答案为 70×2+21×3+15×2

 

  =140+63+30

 

  =233

 

  233-2×105=23

 

  公式:70a+21b+15c-105n

 

  题中有三个数,分别为3、5、7,5*7/3余数为2,取35;3*7/5余数为1,要使余数为3,只需将3*7扩大3倍变成63即可;同样3*5/7的余数为1,要使余数为2,则将3*5扩大2倍,变成30。

#include <stdio.h>
int main()
{
int p ,e ,i ,d ,num ,k = 1;
while(scanf("%d %d %d %d" ,&p ,&e ,&i ,&d) && p != -1 && e != -1 && i != -1 && d != -1)
{
num = (5544 * p + 14421 * e + 1288 * i) % 21252 - d;
if(num > 0)printf("Case %d: the next triple peak occurs in %d days.\n" ,k++ ,num);
else printf("Case %d: the next triple peak occurs in %d days.\n" ,k++ ,21252 + num);
}
return 0;
}

 

posted on 2012-02-01 20:50  小墨在努力!!  阅读(206)  评论(0编辑  收藏  举报