zoukankan      html  css  js  c++  java
  • 中国剩余定理

    P3868 [TJOI2009] 猜数字

    题目描述

    现有两组数字,每组(k)个,第一组中的数字分别为:(a_1)(a_2),...,(a_k)表示,第二组中的数字分别用(b_1)(b_2),...,(b_k)表示。其中第二组中的数字是两两互素的。求最小的非负整数(n),满足对于任意的(i)(n - a_i)能被(b_i)整除。

    输入输出格式

    输入格式:

    输入数据的第一行是一个整数(k)((1 ≤ k ≤ 10))。接下来有两行,第一行是:(a_1)(a_2),...,(a_k),第二行是(b_1)(b_2),...,(b_k)

    输出格式:

    输出所求的整数(n)


    中国剩余定理裸题。

    据说有个点爆longlong了,要用快速乘。

    这里我用_int128 水过去了

    90ptsCode

    #include <cstdio>
    #define ll long long
    const int N=12;
    ll A[N],B[N],n,M=1,x,y,ans=0;
    void exgcd(ll a,ll b)
    {
        if(b==0)
        {
            x=1,y=0;
            return;
        }
        exgcd(b,a%b);
        ll tmp=x;
        x=y;
        y=tmp-a/b*y;
    }
    int main()
    {
        scanf("%lld",&n);
        for(int i=1;i<=n;i++)
            scanf("%lld",A+i);
        for(int i=1;i<=n;i++)
        {
            scanf("%lld",B+i);
            M=M*B[i];
        }
        for(int i=1;i<=n;i++)
        {
            exgcd(M/B[i],B[i]);
            ans=(ans+M/B[i]*x*A[i])%M;
        }
        printf("%lld
    ",(ans%M+M)%M);
        return 0;
    }
    
    

    2018.7.2

  • 相关阅读:
    junit单元测试踩过的坑
    Arrays.asList()需要注意的点
    oracle数据库学习笔记
    实训笔记
    spring事务学习笔记
    java锁
    jvm内存模型
    iOS 应用架构 (三)
    iOS 应用架构 (二)
    iOS 应用架构 (一)
  • 原文地址:https://www.cnblogs.com/butterflydew/p/9255898.html
Copyright © 2011-2022 走看看