Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1575382
  • 博文数量: 399
  • 博客积分: 8508
  • 博客等级: 中将
  • 技术积分: 5302
  • 用 户 组: 普通用户
  • 注册时间: 2009-10-14 09:28
个人简介

能力强的人善于解决问题,有智慧的人善于绕过问题。 区别很微妙,小心谨慎做后者。

文章分类

全部博文(399)

文章存档

2018年(3)

2017年(1)

2016年(1)

2015年(69)

2013年(14)

2012年(17)

2011年(12)

2010年(189)

2009年(93)

分类: LINUX

2010-06-13 21:22:56

#include
#include
#include
int main()
{
int a,b,c,d;
int i,j,k;
int count=0;
int t=23*28;
while(1)
{
count++;
scanf("%d %d %d %d", &a, &b ,&c,&d);
if(-1==a)
break;
for(i=d+1;i<21252;i++)
if(0==(i-a)%23) break;
for(;i<21252;i+=23)
if(0==(i-b)%28) break;
for(;i<21252;i+=t)
if(0==(i-c)%33) break;
printf("Case %d: the next triple peak occurs in %d days.\n",count,i-d);
}
return 0;
}



    简化:已知 n%3=2,n%5=3,n%7=2,求n。 
    再看我们这道题,读入p,e,i,d 4个整数,已知(n+d)%23=p; (n+d)%28=e; (n+d)%33=i ,求n 。 
    是不是一样呢? 

    呵呵,确实一样。想到这里觉得很兴奋。但是韩信是怎么计算出结果的呢? 
    随便google了一下,原来这个东西叫“中国剩余定理”,《孙子算经》中就有计算方法。 
    韩信应该是这样算的: 
       因为n%3=2,n%5=3,n%7=2且3,5,7互质 
       使5×7被3除余1,用35×2=70; 
        使3×7被5除余1,用21×1=21; 
        使3×5被7除余1,用15×1=15。 
       (70×2+21×3+15×2)%(3×5×7)=23 

    同样,这道题也应该是: 
        要求的那天对于23取余应该是p,对于28取余应该是e,对于33取余应该是i.

        使33×28被23除余1,用33×28×8=5544; 
        使23×33被28除余1,用23×33×19=14421; 
        使23×28被33除余1,用23×28×2=1288。 
       (5544×p+14421×e+1288×i)%(23×28×33)=n+d 
        n=(5544×p+14421×e+1288×i-d)%(23×28×33)
阅读(438) | 评论(0) | 转发(0) |
0

上一篇:1276

下一篇:1004

给主人留下些什么吧!~~