求最小公倍数;Lcm 的数据类型是LL, 忽略了,WA了一次!
本题要求的是N%Mi = Mi - a; 即:N%Mi + a = Mi;则有:N + a ≡ 0 ( mod Mi);
定理:若有:a ≡ b(mod mi),当且仅当:a ≡ b (mod [m1 * m2 * ···········mn]);
#include <iostream>
#include <cstdio>
using namespace std;
typedef long long LL;
LL Gcd(LL a, LL b)
{
return b == 0 ? a : Gcd(b, a%b);
}
int main()
{
int k, a;
while(cin>>k>>a)
{
LL Lcm = 1;
if(k == 0 && a == 0)
break;
int b;
for(int i = 0; i < k; ++i)
{
cin>>b;
Lcm = (b * Lcm) / Gcd(Lcm, b);
}
cout<<Lcm - a<<endl;
}
return 0;
}