POJ 1006 Biorhythms (中国剩余定理)
2016-05-16 21:01
323 查看
题意
人的身体智力和情感都有高峰低估期,给出这三个的起始天和现在的天数,求还需要多少天能达到三个高峰。思路
令这个起始天为a, b, c,那么达到的天数就是ans。ans % 23 = a; ans % 28 = b; ans % 33 = c
解这个就可以了。因为数据比较少(为了巩固一下计算方法,就直接在函数里面计算了。
因为28不是质数,所以求逆元的时候要注意方法,不能用快速幂求。
代码
#include <stdio.h> #include <string.h> #include <iostream> #include <algorithm> #include <vector> #include <queue> #include <stack> #include <set> #include <map> #include <string> #include <math.h> #include <stdlib.h> #include <time.h> using namespace std; #define LL long long #define Lowbit(x) ((x)&(-x)) #define lson l, mid, rt << 1 #define rson mid + 1, r, rt << 1|1 #define MP(a, b) make_pair(a, b) const int INF = 0x3f3f3f3f; const int MOD = 1000000007; const int maxn = 1e5 + 10; const double eps = 1e-8; const double PI = acos(-1.0); typedef pair<int, int> pii; void ex_gcd(LL a, LL b, LL &x, LL &y, LL &d) { if (!b) {d = a, x = 1, y = 0;} else { ex_gcd(b, a % b, y, x, d); y -= x * (a / b); } } LL inv(LL a, LL b) { LL x, y, d; ex_gcd(a, b, x, y, d); return x; } int main() { //freopen("in.txt","r",stdin); //freopen("out.txt","w",stdout); int a, b, c, d; int ncase = 1; const int mod = 21252; int aa = 23, bb = 28, cc = 33; int ea = bb * cc * inv(bb * cc, aa); int eb = aa * cc * inv(aa * cc, bb); int ec = aa * bb * inv(aa * bb, cc); while (scanf("%d%d%d%d", &a, &b, &c, &d) && ~a) { int ans = mod + (a * ea + b * eb + c * ec - d) % mod; ans %= mod; if (ans <= 0) ans = mod; printf("Case %d: the next triple peak occurs in %d days.\n", ncase++, ans); } return 0; }
相关文章推荐
- APP开发实战21-Socket概念
- 杭电2609
- Linux Redis 远程访问
- leetcode No283. Move Zeroes
- 利用分布类防止EF更新模型丢失验证信息
- [BS-20] 导航控制器和视图控制器在添加控制器的区别
- Django的Model上都有些什么
- 包含min函数的栈——21
- html如何获取js的变量值
- 什么是RESTfull?理解RESTfull架构
- 接口部分笔记
- android开发二--------高德地图定位
- WebView同步App登陆后获取到的Cookie
- 为 MySQL 增加 HTTP/REST 客户端:MySQL UDF 函数 mysql-udf-http 1.0 发布
- 第12周-阅读程序(4)
- 国防科大A
- Deep Learning学习 之 CNN代码解析(MATLAB)
- 使用Msql统计函数GROUP_CONCAT解决电影票订单表里一条记录多张座位号的问题
- 【Java】接口与抽象类
- 清除mysql表中数据