Poj1006 Biorhythms (中国剩余定理)

本文深入探讨了中国剩余定理在解决周期性问题中的应用,通过实例解析了如何利用该定理解决涉及体力、情感和智力周期同步出现的问题,并详细介绍了求解过程中的关键步骤。

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

今年网络赛用到的知识点,补习中……

题意:人自出生起就有体力,情感和智力三个生理周期,分别为23,28和33天。一个周期内有一天为峰值,在这一天,人在对应的方面(体力,情感或智力)表现最好。通常这三个周期的峰值不会是同一天。现在给出三个日期,分别对应于体力p,情感e,智力i 出现峰值的日期。然后再给出一个起始日期d,要求从这一天开始,算出最少再过多少天后三个峰值同时出现。

思路:中国剩余定理。

关于中国剩余定理,这个讲的比较好:

POJ1006: 中国剩余定理的完美演绎 - head for better - 博客园

最重要的是用好:

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

使33×28被23除余1,用33×28×6=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)

#include <cstdio>

int main ()
{
    int p,e,i,d;
    int lcm=21252,Cas=1;  // lcm(23,28,33)
    while (scanf("%d%d%d%d",&p,&e,&i,&d),~p || ~e || ~i || ~d)
    {
        int n=(5544*p+14421*e+1288*i-d+lcm)%lcm;
        if (n==0) n=lcm;
        printf("Case %d: the next triple peak occurs in %d days.\n",Cas++,n);
    }
}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值