在POJ上有译文(原文右上角),选择语言:简体中文

求解同余方程组:
x=ai(mod mi) i=1~r, m1,m2,...,mr互质
利用中国剩余定理
令M=m1*m2*...*mr,Mi=M/mi
因为mi两两互质,所以(Mi,mi)=1
令Mi*yi=1(mod mi)的解为yi,即Mi模mi的逆元
则方程的解为:
(a1*M1*y1+a2*M2*y2+...+ar*Mr*yr)%M

方法一:用扩展欧几里德求逆元

#include <iostream>
#include <stdio.h>
#include <string.h> using namespace std;
const int M=;
int a[],m[]={,,};
int sp,se,si,d;
int exgcd(int a,int b,int &x,int &y){
if(b==){
x=;
y=;
return a;
}
int d=exgcd(b,a%b,x,y);
int tmp=x;
x=y;
y=tmp-a/b*y;
return d;
}
int main()
{
int cases=,ans;
int ni[],Mi[],x,y;
//因为mi是固定的,所以可以先将对应的逆元用扩展欧几里德求出来
for(int i=;i<;i++){
Mi[i]=M/m[i];
exgcd(Mi[i],m[i],x,y);
ni[i]=x;
}
while(scanf("%d%d%d%d",&sp,&se,&si,&d)!=EOF){
if(sp==-)
break;
a[]=sp;a[]=se;a[]=si;
ans=;
for(int i=;i<;i++){
ans=(ans+(a[i]*Mi[i]%M)*ni[i]%M)%M;
ans=(ans+M)%M;
}
if(ans<=d){
ans=ans+M-d;
}
else
ans=ans-d;
printf("Case %d: the next triple peak occurs in %d days.\n",++cases,ans); }
return ;
}

方法二:枚举求Mi*yi

#include <iostream>
#include <stdio.h>
#include <string.h>
#include <algorithm> using namespace std; const int M=;
int m[]= {,,};
int a[];
int sp,se,si,d;
int Mii[],Mi[];
int value; //求最大公约数,最小公倍数则两数相乘除以它们的最大公约数
int gcd(int a,int b) {
if(b==)
return a;
else
return gcd(b,a%b);
}
int main() {
int cases=;
Mii[]=Mi[]=m[]*m[];
Mii[]=Mi[]=m[]*m[];
Mii[]=Mi[]=m[]*m[];
//枚举求Mi*yi
for(; Mii[]%m[]!=; Mii[]+=Mi[]) {
}
for(; Mii[]%m[]!=; Mii[]+=Mi[]) {
}
for(; Mii[]%m[]!=; Mii[]+=Mi[]) {
}
while(scanf("%d%d%d%d",&sp,&se,&si,&d)!=EOF) {
if(sp==-)
break;
a[]=sp;
a[]=se;
a[]=si;
value=((Mii[]*a[]+Mii[]*a[]+Mii[]*a[])%M+M)%M;
int ans;
if(value<=d) {
ans=value+M-d;
} else
ans=value-d;
printf("Case %d: the next triple peak occurs in %d days.\n",++cases,ans); }
return ;
}

POJ 1006 Biorhythms (中国剩余定理)的更多相关文章

  1. POJ 1006 - Biorhythms (中国剩余定理)

    B - Biorhythms Time Limit:1000MS     Memory Limit:10000KB     64bit IO Format:%I64d & %I64u Subm ...

  2. POJ 1006 Biorhythms(中国剩余定理)

    题目地址:POJ 1006 学习了下中国剩余定理.參考的该博客.博客戳这里. 中国剩余定理的求解方法: 假如说x%c1=m1,x%c2=m2,x%c3=m3.那么能够设三个数R1,R2,R3.R1为c ...

  3. POJ 1006 Biorhythms --中国剩余定理(互质的)

    Biorhythms Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 103539   Accepted: 32012 Des ...

  4. PKU POJ 1006 Biorhythms (中国剩余定理)

    中国剩余定理 x = ai (mod mi)  ai和mi是一组数,mi两两互质,求x 令Mi = m1*m2*~mk     其中,mi不包含在内. 因为mi两两互质,所以存在x和y, st   M ...

  5. POJ.1006 Biorhythms (拓展欧几里得+中国剩余定理)

    POJ.1006 Biorhythms (拓展欧几里得+中国剩余定理) 题意分析 不妨设日期为x,根据题意可以列出日期上的方程: 化简可得: 根据中国剩余定理求解即可. 代码总览 #include & ...

  6. Biorhythms(中国剩余定理)

    http://shuxueshi.jie.blog.163.com/blog/static/13611628820104179856631/ 这篇博客写的很棒! #include<stdio.h ...

  7. poj 1006 Biorhythms (中国剩余定理模板)

    http://poj.org/problem?id=1006 题目大意: 人生来就有三个生理周期,分别为体力.感情和智力周期,它们的周期长度为23天.28天和33天.每一个周期中有一天是高峰.在高峰这 ...

  8. poj 1006:Biorhythms(水题,经典题,中国剩余定理)

    Biorhythms Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 110991   Accepted: 34541 Des ...

  9. 中国剩余定理 POJ 1006 Biorhythms

    题目传送门 题意:POJ有中文题面 分析:其实就是求一次同余方程组:(n+d)=p(%23), (n+d)=e(%28), (n+d)=i(%33),套用中国剩余定理模板 代码: /********* ...

随机推荐

  1. SQL Server 一些关键字详解(一)

    1.CROSS APPLY 和OUTER APPLY MSDN解释如下(个人理解不是很清晰): 使用 APPLY 运算符可以为实现查询操作的外部表表达式返回的每个行调用表值函数.表值函数作为右输入,外 ...

  2. uva 11186 Circum Triangle<叉积>

    链接: http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&a ...

  3. 社保系列11《ATR》

    1)  冷复位(Cold Reset) 当IC卡的电源电压和其他信号从静止状态中复苏且申请复位信号时,IC卡产生的复位. 2)  热复位(Warm Reset) 在时钟(CLK)和电源电压(VCC)处 ...

  4. Android线程---UI线程和非UI线程之间通信

        近期自学到了线程这一块,用了一上午的时间终于搞出来了主.子线程间的相互通信.当主线程sendMessage后,子线程便会调用handleMessage来获取你所发送的Message.我的主线程 ...

  5. acdream 1738 世风日下的哗啦啦族I

    原题链接:http://acdream.info/problem?pid=1738 树套树裸题,如下: #include<algorithm> #include<iostream&g ...

  6. Linux: uid/euid/suid的关系

    三种进程用户的简单解释:三种用户/组ID:uid/gid: 实际用户/组IDeuid/egid: 有效用户/组ID, 进程执行某个应用的用户/组ID.suid/sgid: 设置用户/组ID, 应用所属 ...

  7. Swift的一些基础内容

    //①判断字符串是否为空的方法 isEmpty var str:String = "www.baidu.com" if str.isEmpty { print("空字符串 ...

  8. .NET DES 加密

    using System; using System.Collections.Generic; using System.Text; using System.Security; using Syst ...

  9. VBA 一些用法

    另存为txt格式: Sheets().Activate ActiveWorkbook.SaveAs Filename:="E:\etl_folder\", FileFormat:= ...

  10. 修改ip脚本

    1.打开运行 2.输入CMD 3.在命令提示符下输入: netsh -c interface ip dump > C:\我的网络配置.txt 4.打开您在C:\ 下的"我的网络配置 . ...