思路:看上去是用中国剩余定理,其实仅仅是求最大公约数
代码如下:
#include<cstdio>
#include<iostream>
using namespace std;
typedef long long ll;
ll m[15];
ll extend_gcd(ll a,ll b){
if(b==0){
return a;
}
else{
ll r=extend_gcd(b,a%b);
return r;
}
}
int main(){
// freopen("data.txt","r",stdin);
int I;
ll a;
while(scanf("%d%I64d",&I,&a)!=EOF){
// cout<<I<<' '<<a<<endl;
if(I==0&&a==0)break;
ll lcm;
for(int i=0;i<I;++i){
scanf("%I64d",&m[i]);
// cout<<m[i]<<endl;
if(i==0){lcm=m[i];}
else {//gcd=M/extend_gcd(gcd,m[i],x,y);
lcm=(lcm*m[i])/extend_gcd(lcm,m[i]);
}
}
ll ans=lcm-a;
printf("%I64d\n",ans);
}
return 0;
}