您的位置:首页 > 大数据 > 人工智能

HDU 1788 Chinese remainder theorem again

2014-03-10 09:39 357 查看
题目介绍了一大堆中国剩余定理的东西,其实没有用到.

求N,满足N%Mi = Mi - a.

也就是(N + a) % Mi = 0,也就是(N + a)是Mi的最小公倍数,那么只要求出Mi的最小公倍数再减一个a那么就是答案了.

注意用long long.

#include <cstdio>
using namespace std;

long long gcd(long long a, long long b){
return !b ? a : gcd(b, a % b);
}

long long lcm(long long a, long long b){
return a / gcd(a, b) * b;
}

int main(int argc, char const *argv[]){
int n, a;
while(scanf("%d%d", &n, &a) == 2){
if(!n && !a)break;
long long LCM = 1;
for(int i = 0; i < n; ++i){
long long b;
scanf("%I64d", &b);
LCM = lcm(LCM, b);
}
printf("%I64d\n", LCM - a);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: