Biorhythms

链接:http://poj.org/problem?id=1006
思路:
中国剩余定理水题
贴一个中国剩余定理:
图片说明
逆元不能用快速幂,而要用exgcd来求,之前没有注意,快速幂求逆元是费马小定理要求模数是质数的时候才可以。
代码:

#include <iostream>  
#include <stdio.h>  
#include <string.h>   
#include <stack>  
#include <queue>   
#include <map>  
#include <set>  
#include <vector>  
#include <math.h>  
#include <bitset>  
#include <algorithm>  
#include <climits>

using namespace std;
typedef long long ll;

ll exgcd(ll a, ll b, ll &x, ll &y)
{
    if(b == 0) {x = 1; y = 0; return a;}
    ll d = exgcd(b, a%b, y, x);
    y = y - a/b * x;
    return d;
}

ll china(int n, ll *m, ll *a)
{
    ll M = 1, res = 0;
    for(int i = 0; i < n; i++) M*=m[i];
    for(int i = 0; i < n; i++) {
        ll w = M/m[i];
        ll x, y;
        exgcd(w, m[i], x, y);
        x = (x%m[i] + m[i]) % m[i];
        res = (res + a[i]*x*w % M) % M;
    }
    return res;
}

ll m[5], a[5];
int main()
{
    int cnt = 0, d;
    m[0] = 23, m[1] = 28, m[2] = 33;
    while(cin >> a[0] >> a[1] >> a[2] >> d)
    {
        if(a[0] == -1 && a[1] == -1 && a[2] == -1 && d == -1) break;
        ll ans = (china(3, m, a) - d + 21252) % 21252;
        if(ans == 0) ans = 21252;
        printf("Case %d: the next triple peak occurs in %lld days.\n",++cnt, ans);
    }
} 
全部评论

相关推荐

Pandaileee:校友加油我现在也只有一个保底太难了
点赞 评论 收藏
分享
霁华Tel:秋招结束了,好累。我自编了一篇对话,语言别人看不懂,我觉得有某种力量在控制我的身体,我明明觉得有些东西就在眼前,但身边的人却说啥也没有,有神秘人通过电视,手机等在暗暗的给我发信号,我有时候会突然觉得身体的某一部分不属于我了。面对不同的人或场合,我表现出不一样的自己,以至于都不知道自己到底是什么样子的人。我觉得我已经做的很好,不需要其他人的建议和批评,我有些时候难以控制的兴奋,但是呼吸都让人开心。
点赞 评论 收藏
分享
09-27 00:29
东北大学 Java
伟大的麻辣烫:查看图片
阿里巴巴稳定性 75人发布 投递阿里巴巴等公司10个岗位
点赞 评论 收藏
分享
2 1 评论
分享
牛客网
牛客企业服务