• poj 1006中国剩余定理模板


    中国剩余定理(CRT)的表述如下

    设正整数两两互素,则同余方程组

                                 

    有整数解。并且在模下的解是唯一的,解为

                                   

    其中,而的逆元。

    模板:

    int crt(int a[],int m[],int n)
    {
        int e=0;
        int mod=1;
        for(int i=1; i<=n; i++) mod*=m[i];
        for(int i=1; i<=n; i++)
        {
            int temp=mod/m[i];
            e=(e+a[i]*temp*inv(temp,m[i]))%mod; // 这里求逆元 是对mi求,,
        }
        return e;
    }

    poj 1006ac代码:

    #include <cstdio>
    #include <iostream>
    #include <cstring>
    #include <algorithm>
    using namespace std;
    int mod;
    int exgcd(int a,int b,int &x,int &y)
    {
        if(b==0)
        {
           x=1;
           y=0;
           return a;
        }
        int temp=exgcd(b,a%b,y,x);
        y-=(a/b)*x;
        return temp;
    }
    int inv(int a,int b)
    {
        int x,y;
        int temp=exgcd(a,b,x,y);
        if(x<0) x+=b/temp;
        return x;
    }
    int crt(int a[],int m[],int n)
    {
        int e=0;
        int mod=1;
        for(int i=1; i<=n; i++) mod*=m[i];
        for(int i=1; i<=n; i++)
        {
            int temp=mod/m[i];
            e=(e+a[i]*temp*inv(temp,m[i]))%mod; // 这里求逆元 是对mi求,,
        }
        return e;
    }
    int main()
    {
        int a[4],m[4];
        m[1]=23;
        m[2]=28;
        m[3]=33;
        int s;
        int Case=0;
        while(cin>>a[1]>>a[2]>>a[3]>>s)
        {
            if(a[1]==-1 && a[2]==-1 && a[3]==-1 && s==-1) break;
            int e=0;
            Case++;
            e=crt(a,m,3);
            if(e <= s) e+=21252;
            printf("Case %d: the next triple peak occurs in %d days.
    ",Case,e-s);
        }
        return 0;
    }
  • 相关阅读:
    C#基础知识(以宝马,车,车轮为例)
    JAVA之本地图片复制
    JAVA获取PC每个盘符,获取每个盘符总大小,剩余空间大小
    Extjs window autoload
    jquery入门(一)
    extjs 鼠标滑过grid时产生提示grid列中的值
    poi导出
    Extjs 报表同值合并方法
    强大的grep命令
    job
  • 原文地址:https://www.cnblogs.com/z1141000271/p/7213966.html
Copyright © 2020-2023  润新知