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

      

    Total Submission(s) : 32   Accepted Submission(s) : 15
    Problem Description
    求在小于等于N的正整数中有多少个X满足:X mod a[0] = b[0], X mod a[1] = b[1], X mod a[2] = b[2], …, X mod a[i] = b[i], … (0 < a[i] <= 10)。
     
    Input
    输入数据的第一行为一个正整数T,表示有T组测试数据。每组测试数据的第一行为两个正整数N,M (0 < N <= 1000,000,000 , 0 < M <= 10),表示X小于等于N,数组a和b中各有M个元素。接下来两行,每行各有M个正整数,分别为a和b中的元素。
     
    Output
    对应每一组输入,在独立一行中输出一个正整数,表示满足条件的X的个数。
     
     
    就是中国剩余定理不互质的情况  套模板就可以了
    #include <iostream>
    #include <cstdio>
    #include <cstring>
    using namespace std;
    typedef long long ll;
    bool flag;
    ll m[100],a[100],lcm;
    ll gcd(ll a,ll b){
        return b ? gcd(b,a%b) : a;
    }
    ll ex_gcd(ll a,ll b,ll &x,ll &y){
        if(!b){
            x = 1;
            y = 0;
            return a;
        }
        ll g = ex_gcd(b,a%b,y,x);
        y -= a / b * x;
        return g;
    }
    ll China(ll n){
        ll m1 = m[0],a1 = a[0];
        ll m2,a2,k1,k2,x0,g,c;
        lcm = m[0];
        for(int i = 1; i < n; i++){
            m2 = m[i];
            a2 = a[i];
            c = a2 - a1;
            g = ex_gcd(m1,m2,k1,k2);
            lcm = lcm * m[i] / gcd(lcm,m[i]);
            if(c % g){
                flag = false;
                return 0;
            }
            x0 = k1 * c / g;
            ll t = m2 / g;
            x0 = (x0 % t + t) % t;
            a1 += m1 * x0;
            m1 = m2 / g * m1;
        }
        return a1;
    }
    int main(){
        int T;
        scanf("%d",&T);
        while(T--){
            ll N;
            int n;
            scanf("%lld%d",&N,&n);
            for(int i = 0; i < n; i++) scanf("%lld",&m[i]);
            for(int i = 0; i < n; i++) scanf("%lld",&a[i]);
            flag = true;
            ll ans = China(n);
            if(!flag || ans > N){
                printf("0
    ");
            }
            else{
                if(ans <= 0) ans += lcm;
                ans = (N - ans) / lcm + 1;
                printf("%lld
    ",ans);
            }
        }
        return 0;
    }
    View Code
     
  • 相关阅读:
    没有功能需求文档就拒绝开发吗?
    用Spring cloud Stream来开发基于MQ消息驱动的微服务
    在Linux上讲Java命令行的作为服务运行
    EF提供的三种查询方式
    C#中sealed关键字
    winform Chart控件 获取鼠标处坐标值方法
    Linq to Entity中连接两个数据库时要注意的问题
    linq中查询列表的使用及iqueryable和list集合之间的转换
    C语言关键字register、extern、static
    DllImport的具体用法
  • 原文地址:https://www.cnblogs.com/bxd123/p/10964541.html
Copyright © 2011-2022 走看看