PKU 1006 Biorhythms

本文介绍中国剩余定理的应用,通过具体实例演示了如何利用该定理解决特定类型的数学问题,并提供了完整的C语言实现代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

若某数x分别被d1、、…、dn除得的余数为r1、r2、…、rn,则可表示为下式:
x=R1r1+R2r2+…+Rnrn+RD
其中R1是d2、d3、…、dn的公倍数,而且被d1除,余数为1;
R1 、R2…、Rn是d1、d2、…、dn-1的公倍数,而且被dn除,余数为1;
D是d1、d2、…、的最小公倍数;
R是任意整数,可根据实际需要决定;
且d1、、…、必须互质,以保证每个Ri(i=1,2,…,n)都能求得.
 
实际上POJ1006就是中国剩余定理的典型应用
根据上面的条件求出常数R1 = 5544,R2 = 14421,R3 = 1288,D = 21252
每次给的数据中的前三个值即相当于上面的余数。
则显然:
res = R1 * Physical + R2 * Emotion + R3 * Intelligence + RD - givenDate
并且0 =< res <= D
 
原代码如下: 

 

#include <stdio.h>
int main()

    int p
,e,i,d,a,t=0;
    
while(1)
    {
        scanf(
"%d%d%d%d",&p,&e,&i,&d);
        
if(p==-1 && e==-1 && i==-1 && d==-1)
            
break;
        a
=(5544*p+14421*e+1288*i-d+21252)%21252;
        
if(!a)
            a
=21252;
        
printf("Case %d: the next triple peak occurs in %d days. ",++t,a);
    }
    
return 0;
}

 


/****************************************************
//find the value of R1, R2 and R3 according to 中国剩余定理
#include<stdio.h>
int main()
{
    int i;
    int R1
, R2, R3;
    
for(i=1, R1=28*331; i++)
        
if(R1*i%23==1)
            
break;
    R1 
*= i;

    
for(i=1, R2=23*331; i++)
        
if(R2*i%28==1
            
break;
    R2 
*= i;

    
for(i=1, R3=23*281; i++)
        
if(R3*i%33==1
            
break;
    R3 
*= i;

    
printf("R1 = %d  R2 = %d R3 = %d ",R1,R2,R3);
    
return 0;
}

*****************************************************/
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值