• 中国剩余定理模板poj1006


    #include <cstdio>
    #include <iostream>
    #include <cstring>
    #include <cmath>
    #include <cstdlib>
    #include <algorithm>
    
    using namespace std;
    typedef long long ll;
    const int maxn = 20;
    ll exgcd(ll a, ll b, ll &x, ll &y)
    {
        if (b == 0)
        {
            x = 1; 
            y = 0;
            return a;
        }
        ll r = exgcd(b, a % b, x, y);
        ll t = x;
        x = y;
        y = t - a / b * y;
        return r;
    }
    ll china_remainder(int a[], int w[], int n)//w存放除数,a存放余数
    {
        ll M = 1, ans = 0, x, y;
        for (int i = 0; i < n; i++)
            M *= w[i];
        for (int i = 0; i < n; i++)
        {
            ll m = M / w[i];
            exgcd(m, w[i], x, y);
            ans = (ans + x * m * a[i]) % M;
        }
        return (ans % M + M) % M;
    }
    int main()
    {
        int T, m, a[maxn], w[maxn];
        w[0] = 23; w[1] = 28; w[2] = 33;
        ll n = 3;
        int p, e, i, d, kase = 0;
        while (~scanf("%d %d %d %d", &p, &e, &i, &d))
        {
            if (p == -1 && e == -1 && i == -1 && d == -1)
                break;
            a[0] = p;
            a[1] = e;
            a[2] = i;
            ll ans = china_remainder(a, w, n);
            ans -= d;
            int mod = w[0] * w[1] * w[2];
            ans = (ans % mod + mod) % mod;
            if (ans == 0)
                ans = mod;
            printf("Case %d: the next triple peak occurs in %lld days.
    ", ++kase, ans);
    
        }
        return 0;
    }
  • 相关阅读:
    雷锋依然在人间 工厂方法模式
    为别人做嫁衣 代理模式
    穿什么有这么重要? 装饰模式
    437. Path Sum III
    434. Number of Segments in a String
    447. Add Strings
    414. Third Maximum Number
    412. Fizz Buzz
    404. Sum of Left Leaves
    405. Convert a Number to Hexadecimal
  • 原文地址:https://www.cnblogs.com/Howe-Young/p/4710691.html
Copyright © 2020-2023  润新知