您的位置:首页 > 其它

hdu 1573 中国剩余定理

2014-08-23 10:07 295 查看
题目:
求在小于等于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,然后求a[0]~a[n-1]的最小公倍数k,则满足条件的整数n满足X+k*i(i=0,1,2....)

解题代码:

#include<stdio.h>
#include<string.h>
#include<math.h>
#include<stdlib.h>
#include<algorithm>
using namespace std;

int gcd(int a,int b)
{
return b==0?a:gcd(b,a%b);
}
int main()
{
int t,n,m;
int a[10],b[10];
scanf("%d",&t);
while(t--)
{
scanf("%d %d",&n,&m);
int k=1;
for(int i=0;i<m;i++)
{
scanf("%d",&a[i]);
int p=gcd(k,a[i]);
k=k*a[i]/p;
}
for(int i=0;i<m;i++)
scanf("%d",&b[i]);
int ans=0;
for(int i=1;i<=(n<k?n:k);i++)
{
for(int j=0;j<m;j++)
{
if(i%a[j]!=b[j]) break;
if(j==m-1)
{
ans=(n-i)/k+1;
break;
}
}
}

printf("%d\n",ans);

}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: