poj1006 ( hdu1370 ):中国剩余定理裸题

裸题,没什么好说的

第一个中国剩余定理

写暴力都过了。。可见这题有多水

代码:

#include<iostream>
#include<stdio.h>
#include<math.h>
#include<string>
#include<map>
#include<algorithm>
using namespace std;
#define MAX 200000000
#define ull unsigned long long
const int MAXN = 100011;
int a[3];
int m[3]={23,28,33};
int exgcd(int a,int b,int &x,int &y)
{
    if(b==0)
    {
        x=1;y=0;
        return a;
    }
    int r=exgcd(b,a%b,x,y);
    int t=x;
    x=y;
    y=(t-a/b*y);
    return r;
}
int china(int n)
{
    int M=1;
    int ans=0;
    int x,y,d;
    for(int i=0;i<n;i++)
    {
        M*=m[i];
    }
    for(int i=0;i<n;i++)
    {
        int mi=M/m[i];
        int x,y;
        d=exgcd(mi,m[i],x,y);
        ans=(ans+a[i]*mi*x)%M;
    }
    while(ans<0)
        ans+=M;
    return ans;
}
 int main()
 {
     int t;
     scanf("%d",&t);
     while(t--)
     {
         getchar();
         int p,e,d,n,x,f;
         int tt=0;
         int ans=21252;
         while(scanf("%d%d%d%d",&a[0],&a[1],&a[2],&d)&&(a[0]!=-1||a[1]!=-1||a[2]!=-1||d!=-1))
         {
             tt++;
             ans=china(3);
             while(ans<=d)
                 ans+=21252;
             printf("Case %d: the next triple peak occurs in %d days.\n",tt,ans-d);
         }
         while(t)
             printf("\n");
     }
    return 0;
}
时间: 2024-10-14 07:05:48

poj1006 ( hdu1370 ):中国剩余定理裸题的相关文章

POJ1006——Biorhythms(中国剩余定理)

Biorhythms Description人生来就有三个生理周期,分别为体力.感情和智力周期,它们的周期长度为23天.28天和33天.每一个周期中有一天是高峰.在高峰这天,人会在相应的方面表现出色.例如,智力周期的高峰,人会思维敏捷,精力容易高度集中.因为三个周期的周长不同,所以通常三个周期的高峰不会落在同一天.对于每个人,我们想知道何时三个高峰落在同一天.对于每个周期,我们会给出从当前年份的第一天开始,到出现高峰的天数(不一定是第一次高峰出现的时间).你的任务是给定一个从当年第一天开始数的天

【poj 1006】Biorhythms(数论--中国剩余定理 模版题){附【转】中国剩余定理 }

题意: 有 解法:中国剩余定理.定义为有 k 对关系:P % ai = bi,其中 ai 两两之间互质.(而两两之间不互质就是把原来的关系式化为:P = bi (mod ai) →  ai * x + bi = P,用拓展欧几里德求解同余方程组了.)    而 ai 两两互质时,可知道 a2*a3*...*ak = 1 (mod a1)  和  a1*a3*...*ak = 1 (mod a2) 等关系.那么想使 P % ai = bi ,就是要式子两边同乘 bi 了. 下面是转载的了~ 原博:

POJ1006(中国剩余定理+大衍求一术)

Biorhythms Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 115292   Accepted: 36148 题目链接:http://poj.org/problem?id=1006 Description Some people believe that there are three cycles in a person's life that start the day he or she is born.

poj 1006(中国剩余定理+模板题)

题意:人自出生起就有体力,情感和智力三个生理周期,分别为23,28和33天.一个周期内有一天为峰值,在这一天,人在对应的方面(体力,情感或智力)表现最好.通常这三个周期的峰值不会是同一天.现在给出三个日期,分别对应于体力,情感,智力出现峰值的日期.然后再给出一个起始日期,要求从这一天开始,算出最少再过多少天后三个峰值同时出现. 设第x天同时出现,则x%23=p%23,x%28=i%28...(等于p,i也是可以的,计算中会mod),然后用x-d即可,因为x可能小于d,所以加上23*28*33再对

HDU 3579 Hello Kiki 中国剩余定理(合并方程

题意: 给定方程 res % 14 = 5 res % 57 = 56 求res 中国剩余定理裸题 #include<stdio.h> #include<string.h> #include<iostream> #include<algorithm> #include<math.h> #include<set> #include<queue> #include<vector> using namespace s

poj1006 中国剩余定理&amp;&amp;中国剩余定理解析

poj 1006 题的思路不是很难的,可以转化数学式: 现设 num 是下一个相同日子距离开始的天数 p,e,i,d 如题中所设! 那么就可以得到三个式子:( num + d ) % 23 == p: ( num + d ) % 28 == e: ( num + d ) % 33 == i: p,e,i,d 是我们输入的,那么我们需要求出num即可,为了方便,我们将num+d暂时作为一个整体!令x = num + d: 即:x % 23 == p: x % 28 == e: x % 33 ==

【中国剩余定理】 poj 1006

生理周期  简单模拟 对于超出23 * 28 * 33(21252)时进行求余运算即可. #include<stdio.h> int main() { //freopen("in.txt","r",stdin); int a,b,c,d,s,m=1; while(scanf("%d %d %d %d",&a,&b,&c,&d),(a!=-1||b!=-1||c!=-1||d!=-1)) { s=a; i

关于中国剩余定理及同余方程组求解

上个月去清北学堂 膜拜牛逼滴 ZHXdalao 他在讲求解同余方程组时说了他个人独创的一种牛逼算法 -----------------------大数翻倍法 说白了就是小学奥赛 例如: 我们在求解一组同余方程组 ①x≡3(mod 5) ②x≡6(mod 7) ③x≡11(mod 23) 有些dalao一眼就看出来了 但是对不起 我们需要用计算机求解 至于什么扩欧求解我压根也不讲并且也不会 首先 我们假设 最终解ans=1   每次翻的数res=1 十分明显ans不满足① 那么就让ans翻滚吧  

『线性同余方程和中国剩余定理』

线性同余方程 定义 给定整数\(a,b,m\),对于形如\(ax\equiv b(mod\ m)\)的同余方程我们称之为一次同余方程,即线性同余方程. 解线性同余方程 对于此类方程,我们可以用如下方法快速的求解. \[ ax\equiv b(mod\ m)?m|ax-b \] 不妨设\(-ym=ax-b\),则可以将方程改写为\(ax+my=b\),该不定方程可以使用扩展欧几里得算法快速地求解(详见『扩展欧几里得算法 Extended Euclid』). 对于\(gcd(a,m)\not |b\