X-man

导航

hdu 1573 X问题(中国剩余定理应用)

题解:

       求出除数a[0]……a[m-1]的最小公倍数gcd;

       由中国剩余定理在【1,gcd】中存在且仅有一个x满足;

#include<stdio.h>
#include<string.h>
int a[11],b[11];
int gcd(int a,int b)
{
    if(b==0)return a;
    return gcd(b,a%b);
}
int main()
{
    int _case;
    int n,m,i,j,k;
    scanf("%d",&_case);
    while(_case--)
    {
        memset(a,0,sizeof(a));
        memset(b,0,sizeof(b));
        scanf("%d %d",&n,&m);
        for(i=0;i<m;i++)
        scanf("%d",&a[i]);
        for(i=0;i<m;i++)
        scanf("%d",&b[i]);
        int tmp=1;
        long long ans=1;
        for(i=0;i<m;i++)
        {
            tmp=gcd(ans,a[i]);
            ans=ans*a[i]/tmp;
        }
        k=0;
        for(i=1;i<=ans&&i<=n;i++)
        {
            for(j=0;j<m;j++)
            {
                if(i%a[j]!=b[j])break;
            }
            if(j==m)
            {
                k=i;
                break;
            }
        }
        if(k==0)printf("%d\n",k);
        else
        {
            int yu=n%ans;
            if(yu>=k)k=n/ans+1;
            else k=n/ans;
            printf("%d\n",k);
        }
    }
    return 0;
}

 

                   

posted on 2013-05-30 20:59  雨钝风轻  阅读(201)  评论(0编辑  收藏  举报