程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> HDU 1573 X問題 中國剩余定理

HDU 1573 X問題 中國剩余定理

編輯:C++入門知識

HDU 1573 X問題 中國剩余定理


 

題意:求在小於等於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)。

思路:中國剩余定理的模板題,如果找不到這樣的數或者最小的X大於N,輸出零。

代碼:

 

#include 
#include 
#include 
#include 
#include
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#define PI acos(-1.0)
#define maxn 10005
#define INF 0x7fffffff
#define eps 1e-8
typedef long long LL;
typedef unsigned long long ULL;
using namespace std;
LL MOD;
LL extend_gcd(LL a, LL b, LL &x, LL &y)
{
    if(b==0)
    {
        x=1;
        y=0;
        return a;
    }
    LL r=extend_gcd(b,a%b,x,y);
    LL t=x;
    x=y;
    y=t-a/b*y;
    return r;
}
LL inv(LL a,LL m)
{
    LL d,x,y;
    d=extend_gcd(a,m,x,y);
    if (d==1)
    {
        x=(x%m+m)%m;
        return x;
    }
    else return -1;
}
LL gcd(LL a,LL b)
{
    return b==0?a:gcd(b,a%b);
}
bool merge(LL a1,LL m1,LL a2,LL m2,LL &a3,LL &m3)
{
    LL d=gcd(m1,m2);
    LL c=a2-a1;
    if(c%d)
        return false;
    c=(c%m2+m2)%m2;
    c/=d;
    m1/=d;
    m2/=d;
    c*=inv(m1,m2);
    c%=m2;
    c*=m1*d;
    c+=a1;
    m3=m1*m2*d;
    a3=(c%m3+m3)%m3;
    return true;
}
LL CRT_next(LL a[],LL m[],int n)
{
    LL a1=a[0],m1=m[0],a2,m2;
    for(int i=1;it1)
                printf(0
);
            else
                printf(%I64d
,(t1-ans)/MOD+1);
        }
    }
    return 0;
}


 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved