zoukankan      html  css  js  c++  java
  • POJ 1006 生理周期【数论】

    这题是有中文版的(右上角选项卡里把default改成简体中文)然后看到他把biorhythms翻成生理周期我可耻的笑了......23333

    如果没有限定从日期d开始,完全可以从第一天起开始计时,因此设从第一天开始x天生理周期重合,很容易列出等式:

    x=p+k1*23=e+k2*28= i+k3*33

    接着转成同余式(方程组)

    x ≡ p (mod 23)

    x ≡ e (mod 28)

    x ≡ i (mod 33)

    哈 23 28 33 正好是互质的免去了另外的转换了,这时想直接套用中国剩余的模板显然是很蠢的做法,因为此时模数 23 28 33 都已给出很容易直接算出Mi,Mi’ :

    M1=28*33=924

    M1’*924≡1 (mod 23)

    解得M1’=6

    同理M2=23*33=759 M2’=19

    M3=23*28=644 M3’=2

    因此x=ΣMi*Mi’*ki(k1=p,k2=e,k3=i)=924*6*p+759*19*e+644*2*i

    = 5544*p+14421*e+1288*i

    因为要求0~23*28*33范围内的一组解并且有一个初始时间d 因此最终结果就是(5544*p+14421*e+1288*i-d)% 21252 再判断下防止结果为负数就行了

    #include<cstdio>

    #include<iostream>

    #include<string.h>

    using namespace std;

    int main()

    {

       int p,e,i,d,t=0,ans;

       scanf("%d%d%d%d",&p,&e,&i,&d);

       while (p!=-1)

        {

           ans=(5544*p+14421*e+1288*i-d)% 21252;

           if (ans<=0)ans+=21252;

           printf("Case %d: the next triple peak occurs in %ddays. ",++t,ans);

           scanf("%d%d%d%d",&p,&e,&i,&d);

        }

       return 0;

    }

  • 相关阅读:
    负载均衡获得真实源IP的6种方法
    美图全链路监控实战
    移动端APM网络监控与优化方案
    k8s 如何对外提供服务
    mysql5.7安装audit审计插件
    mysql 5.7安装密码校验插件validate_password
    Linux Crontab 定时任务
    stm32 hard fault usage fault UNALIGNED -> task stack overflow
    linux逻辑卷管理(LVM)
    suse11开启telnet服务
  • 原文地址:https://www.cnblogs.com/philippica/p/4006956.html
Copyright © 2011-2022 走看看