题意:一个正整数N除以M1余(M1 - a),除以M2余(M2-a), 除以M3余(M3-a),总之, 除以MI余(MI-a),其中(a<Mi<100 i=1,2,…I),求满足条件的最小的数。
思路:化简式子
N = M1-a mod M1
N = M2-a mod M2
N = m3-a mod M3
写成 N + k1*M1 = M1 -a --> N+ k1*M1 +a = M1 也就是
N + k1*M1 +a = 0 mod M1
N + k2*M2 +a = 0 mod M2
N +k1*M1 写成 A 结果就是
A + a = 0 mod M1
A + a = 0 mod M2
如果余数相等,除数互质那么最小的解就是 Mi的最小公倍数这题就是解最小公倍数的
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
using namespace std;
typedef long long int64;
int64 gcd(int64 a,int64 b)
{
if(b == 0)
return a;
else
return gcd(b,a%b);
}
int main()
{
int64 I,a;
while(scanf("%I64d%I64d",&I,&a) != EOF)
{
int64 ans = 1,m;
if(I == 0 && a == 0 )
break;
for(int64 i = 0; i < I; i++)
{
scanf("%I64d",&m);
ans = ans*m/gcd(ans,m);
}
printf("%I64d\n",ans-a);
}
return 0;
}