现在的位置: 首页 > 综合 > 正文

hdu 1573 孙子定理

2013年08月16日 ⁄ 综合 ⁄ 共 723字 ⁄ 字号 评论关闭
题意:在1 到n中求有多少个x满足 x%a【i】=b【i】。
令任意固定整数为M,当M/A余a,M/B余b,M/C余c,M/D余d,…,M/Z余z时,这里的A,B,C,D,…,Z为除数,除数为任意自然数([span]如果为0,没有任何意义,如果为1,在孙子定理中没有计算和探讨的价值,所以,不包括0和1)时;余数a,b,c,d,z为自然整数时。
1、当命题正确时,在这些除数的最小公倍数内有解,有唯一的解,每一个最小公倍数内都有唯一的解;当命题错误时,在整个自然数范围内都无解
#include<cstdio>
#include<cstring>
int a[11],b[11];
int gcd(int x,int y)
{
    return y?gcd(y,x%y):x;
}
int main()
{
    int ncase,i,n,m,j;
    scanf("%d",&ncase);
    while(ncase--)
    {
        scanf("%d%d",&n,&m);
        long long ans=1;
        for(i=1;i<=m;i++)
        {
            scanf("%d",&a[i]);
            ans=(ans*a[i])/gcd(ans,a[i]);
        }
        for(i=1;i<=m;i++)
           scanf("%d",&b[i]);
        int k=0,num;
        for(i=1;i<=ans&&i<=n;i++)
        {
            for(j=1;j<=m;j++)
            {
                if(i%a[j]!=b[j])
                   break;
            }
            if(j==m+1) { k=i;break;}
        }
        if(k==0) {printf("%d\n",k);continue;}
        int tmp=n%ans;
        num=n/ans;
        if(k<=tmp) num++;
        printf("%d\n",num);
    }
    return 0;
}

抱歉!评论已关闭.