题目:http://acm.hdu.edu.cn/showproblem.php?pid=1788
思路:输入n,k,n是数据的个数,k是要处理的个数,举个例子,x%ai=(ai-k)所以(x+k)%ai=0,所以你利用这个性质,题目就变成了求解最小公倍数。求解出的最小公倍数减去k便是所需要的答案。
坑点:说实话,这个题确实能用中国剩余定理,但是只要你好好分析,就会发现用中国剩余定理就有点小题大做了。
同余问题(数论)要静下心来分析,不要急于求成。找到规律。
代码:
#include<iostream>
#include<cstdio>
using namespace std;
long long gcd(long long a,long long b)
{
if(b==0) return a;
return gcd(b,a%b);
}
int main()
{
int n,k;
while(scanf("%d%d",&n,&k)){
if(n==0&&k==0) break;
long long lcm=1;
for(int i=0;i<n;i++){
int x;scanf("%d",&x);
lcm=lcm*x/gcd(lcm,x);
}
printf("%lld\n",lcm-k);
}
}