POJ 1006 Biorhythms(中国剩余定理互质版本)
2016-03-08 17:16
351 查看
http://poj.org/problem?id=1006
X mod a1 = b1
X mod a2 = b2
……
X mod an = bn
如果所有a之间两两互质,求X
1、HDOJ要用__int64,并且避免几种类型数据混合使用。
2、extend_gcd一定要在CRT前面,因为CRT包含了extend_gcd。同理主函数一定是放在最后的,因为它包含所有子函数。
3、注意一下传数组参数的方法
实参都是a, 形参
1) a[]
2) int* a
4、除去后面的数据特殊处理,ans算出来的是所有满足条件的X中的最小非负整数解
5、a mod b = (a % b + b) % b %计算出来的可能是负数,取决于a的正负,但是mod算出来的一定是正的。a mod b = r a = b * q + r (b > 0 and 0 <= r < b),r就是满足x mod b = r的最小非负整数 注意 b>0。当a>0时,mod 和 %就无所谓了。
6、如果a mod b = c,那么(a+kb) mod b = c
如果a mod b = c,那么(a*k) mod b = c
X mod a1 = b1
X mod a2 = b2
……
X mod an = bn
如果所有a之间两两互质,求X
1、HDOJ要用__int64,并且避免几种类型数据混合使用。
2、extend_gcd一定要在CRT前面,因为CRT包含了extend_gcd。同理主函数一定是放在最后的,因为它包含所有子函数。
3、注意一下传数组参数的方法
实参都是a, 形参
1) a[]
2) int* a
4、除去后面的数据特殊处理,ans算出来的是所有满足条件的X中的最小非负整数解
5、a mod b = (a % b + b) % b %计算出来的可能是负数,取决于a的正负,但是mod算出来的一定是正的。a mod b = r a = b * q + r (b > 0 and 0 <= r < b),r就是满足x mod b = r的最小非负整数 注意 b>0。当a>0时,mod 和 %就无所谓了。
6、如果a mod b = c,那么(a+kb) mod b = c
如果a mod b = c,那么(a*k) mod b = c
#include<cstdio> #include<cstring> #include<cmath> #include<algorithm> #define LL __int64 using namespace std; LL n, k, m[100], a[100], T, cnt, D, ans;//模数为m,余数为a, X % m = a //m互素 LL extend_gcd(LL a, LL b, LL &x, LL &y) { if(a == 0 && b == 0) return -1; if(b ==0 ) { x = 1; y = 0; return a; } LL d = extend_gcd(b,a%b,y,x); y -= a/b*x; return d; } LL CRT(LL a[], LL m[], LL n) { LL M = 1; LL ans = 0; for(int i = 0; i < n; i++) M *= m[i]; for(int i = 0; i < n; i++) { LL x, y; LL Mi = M / m[i]; extend_gcd(Mi, m[i], x, y); ans = ((ans + Mi * x * a[i]) % M + M) % M; } ans = ((ans - D) % M + M) % M; ans = ans % 21252; if (ans == 0) ans = 21252; return ans; } int main() { scanf("%I64d", &T); m[0] = 23; m[1] = 28; m[2] = 33; while (T--) { cnt = 0; while (~scanf("%I64d%I64d%I64d%I64d", &a[0], &a[1], &a[2], &D) && a[0] != -1) { cnt++; LL ans = CRT(a, m, 3); printf("Case %I64d: the next triple peak occurs in %I64d days.\n", cnt, ans); } } return 0; }
相关文章推荐
- 分享一种用户密码加密方式解析
- [国嵌攻略][120][按键驱动硬件操作实现]
- MFC程序查看内存泄露方法
- ORACLE中BFILE字段的使用研究
- su - 提示失败问题[su方式]
- Linux基础——用户、用户组和权限管理
- 使用Charles,在mac环境下对android app抓包
- maven 下载 源码和javadoc命令
- zookeeper学习整理
- 利用Python,四步掌握机器学习
- Java并发编程:Callable、Future和FutureTask
- 开始写博客了(´・_・`)
- UISearchBar的光标
- 开发Windows性能计数器提供程序
- NDK 使用笔记
- Effective C++ Item 36 绝不又一次定义继承而来的 non-virtual 函数
- Angular零星知识点(一)
- php 获取客户端的真实ip地址 通过第三方网站
- 理解 Storm 拓扑的并行度(parallelism)概念
- Apache 日志