zoukankan      html  css  js  c++  java
  • 生理周期

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

    中国剩余定理模板题

     1 #include<stdio.h>
     2 #include<string.h>
     3 int p,e,i,d;
     4 int a[5],m[5];
     5 int item = 1;
     6 int extend_gcd(int a,int b,int &x,int &y)
     7 {
     8     if(b == 0)
     9     {
    10         x = 1;
    11         y = 0;
    12         return a;
    13     }
    14     else
    15     {
    16         int r = extend_gcd(b,a%b,x,y);
    17         int t = x;
    18         x = y;
    19         y = t-a/b*y;
    20         return r;
    21     }
    22 }
    23 
    24 void CRT()
    25 {
    26     int M = 1,tm,ret = 0;
    27     for(int i = 0; i < 3; i++)
    28         M*=m[i];
    29     for(int i = 0; i < 3; i++)
    30     {
    31         int x,y;
    32         tm = M/m[i];
    33         extend_gcd(tm,m[i],x,y);
    34         ret = (ret + tm*x*a[i])%M;
    35     }
    36     if(ret - d <= 0)
    37         printf("Case %d: the next triple peak occurs in %d days.
    ",item,ret+M-d);
    38     else printf("Case %d: the next triple peak occurs in %d days.
    ",item,(ret+M)%M-d);
    39 }
    40 
    41 int main()
    42 {
    43 
    44     while(~scanf("%d %d %d %d",&p,&e,&i,&d))
    45     {
    46         if(p == -1 && e == -1 && i == -1 && d == -1)
    47             break;
    48         a[0] = p;
    49         a[1] = e;
    50         a[2] = i;
    51         m[0] = 23;
    52         m[1] = 28;
    53         m[2] = 33;
    54         CRT();
    55         item++;
    56 
    57     }
    58     return 0;
    59 }
    View Code

    中国剩余定理

    设m1,m2,...,mk两两互质,则下面的同余方程组:
      x = a1 (mod m1)
      x = ak (mod mk)
        .
        .
        .
      x = ak (mod mk)


    0<=x<M = m1*m2*...*mk内有唯一解。
    记Mi = M / mi (1<=i<=k) ,因为(Mi,mi)=1,故有两整数pi,qi满足Mi*pi + mi*qi = 1,
    如果记ei = Mi*pi ,那么有 
    ei = 0 (mod mj) , j<>i
       = 1 (mod mj) , j==i
       
    很显然,e1*a1 + e2*a2 + ... + ek*ak 就时方程组的一个解
    这个解%M后就得到了最小的非负整数解;

    求ei可以用扩展欧几里得来求;

  • 相关阅读:
    随机点名系统
    JQuery
    百度搜索下拉提示
    正则表达式
    严格模式
    CSS引入方式有哪些,区别是什么
    Js中的函数
    float浮动造成高度塌陷的解决办法
    PC端页面开发基础-问题总结(一)
    PC端页面开发基础-IE6常见CSS解析Bug及Hack
  • 原文地址:https://www.cnblogs.com/LK1994/p/3369075.html
Copyright © 2011-2022 走看看