poj 1006 Biorhythms 中国剩余定理

本文介绍了一道编程题的解题思路,题目要求找出满足特定条件的整数n。通过使用中国剩余定理,文章提供了一个有效的算法实现,并给出了具体的代码示例。

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

http://poj.org/problem?id=1006

题意是:给出p,e,i,d,求出使(n+d)%23=p,(n+d)%28=e,(n+d)%33=i的n。


中国剩余定理:用于求出使n%x=a,n%y=b,n%z=c的n。

公式:n=A*a+B*b+C*c

    A为y,z的公倍数,且除以x余1的最小数。

    B为x,z的公倍数,且除以y余1的最小数。

    C为x,y的公倍数,且除以z余1的最小数。

ps:1. 如果 a%b=c,则 (a+kb)%b=c (k为非零整数)。
     2. 如果 a%b=c,则 (a*k)%b=kc (k为大于零的整数)。


参考:http://www.cnblogs.com/walker01/archive/2010/01/23/1654880.html

    http://blog.youkuaiyun.com/lyy289065406/article/details/6648551

152K 47MS

#include <iostream>
using namespace std;

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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值