poj1006 Biorhythms 中国剩余定理

本文深入探讨了中国剩余定理在解决POJ1006Biorhythms问题中的应用。通过具体实例,讲解了如何利用该定理进行日期计算,特别是涉及周期性事件的预测。文章还提到了拓展欧几里得算法在计算乘法逆元中的作用。

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

poj1006 Biorhythms 中国剩余定理

首先清楚中国剩余定理

在《孙子算经》中有这样一个问题:“今有物不知其数,三三数之剩二(除以3 余2),五五数之剩三(除以5 余3),七七数之剩二(除以7 余2),问物几何?”

做这个问题之前,首先要清楚两条定理

  1. 如果有a%b=c,则有(a+k b)%b=c(k 为非零整数)。两个数相加,如果存在一个加数,不能被整数a整除,那么它们的和,就不能被整数a整除。
  2. 如果a%b=c,那么(a*k)%b=(a%b+a%b+„+a%b%b=(c+c+„+c)%b=kc%b(k>0)。两数不能整除,若除数扩大(或缩小)了几倍,而被除数不变,则其商和余数也同时扩大(或缩小)相同的倍数(余数必小于除数)
    例: 使33×28×a被23除余1,用33×28×6=5544;
    使23×33×b被28除余1,用23×33×19=14421;
    使23×28×c被33除余1,用23×28×2=1288。
    因为33×28,被23除余4,为了让33×28×a被23除余1,所以根据定理2取33×28×6.
    我们在计算乘法逆元时,经常使用拓展欧几里得算法
    这是我认为的一篇写得比较好的关于拓展欧几里得算法的博客
    https://blog.youkuaiyun.com/leader_one/article/details/75222771
poj1006 Biorhythms
#include<stdio.h>
#include<math.h>
int main(void)
{
	int p,e,i,d,x,n=1;
	while(scanf("%d%d%d%d", &p, &e, &i, &d) != EOF && p != -1&& e  != -1&& i != -10&& d  != -1)
	{
		p=p%23;
		e=e%28;
		i=i%33;
		int t=5544*p+14421*e+1288*i;//这里直接算出28*33*6等,省略了求乘法逆元的步骤 //
		x=t%21252-d;
		while(x<=0)
		{
			t=t%21252+21252;
			x=t-d;
		}
		printf("Case %d: ",n);  
        printf("the next triple peak occurs in %d days.\n", x); 
        n++;
	}
	 
	
	
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值