题意:
给你一个m,和n,表示n个线型方程x%ai=ri,求1-m中有多少个x满足题意。。
根据gcd求解出n个数的最小公倍数lcm,然后判断m%lcm到m%lcm+lcm中是否有满足情况的有的话,说明m%lcm有m/lcm个满足情况,
完后再判断1-m%lcm
#include"stdio.h"
#include"string.h"
#define N 11
int A[N];
int R[N];
int n,m,ans;
int gcd(int a,int b)
{
return b==0?a:gcd(b,a%b);
}
int fun()
{
int i,j;
int t=m%ans;
int cnt=0;
for(i=t+1;i<=t+ans;i++)
{
for(j=0;j<n;j++)if(i%A[j]!=R[j])break;
if(j==n)
{
cnt+=m/ans;break;
}
}
for(i=1;i<=t;i++)
{
for(j=0;j<n;j++)if(i%A[j]!=R[j])break;
if(j==n)
{
cnt++;break;
}
}
return cnt;
}
int main()
{
int i;
int T;
scanf("%d",&T);
while(T--)
{
scanf("%d%d",&m,&n);
ans=1;
for(i=0;i<n;i++)
{
scanf("%d",&A[i]);
int t=gcd(ans,A[i]);
ans*=A[i]/t;
}
for(i=0;i<n;i++)
scanf("%d",&R[i]);
printf("%d\n",fun());
}
return 0;
}