【HDU】 1788 Chinese remainder theorem again

来源:互联网 发布:剑三丐姐捏脸数据邪魅 编辑:程序博客网 时间:2024/06/08 18:31

Chinese remainder theorem again


题目链接

  • Chinese remainder theorem again

题目大意

    就是说现在有

n mod m1=m1an mod m2=m2a...n mod mi=mia

    求一个最小的n~~


题解

    可以化简:

n=kmi+mian=(k+1)mian+a=(k+1)mi

    明显可以看出等式右边是mi的整数倍,所以我们求出mi的最小公倍数再减a就好。


代码

#include <iostream>#include <cstring>#include <cstdio>#define LL long longusing namespace std;LL n,a,m[15];LL lcm;LL gcd(LL a,LL b){    if (b==0) return a;    else return gcd(b,a%b);}int main(){    while(scanf("%I64d%I64d",&n,&a),n!=0 || a!=0)    {        for (int i=0;i<n;i++) scanf("%I64d",&m[i]);        lcm=m[0];        for (int i=0;i<n;i++)            lcm=lcm/gcd(lcm,m[i])*m[i];        lcm-=a;        printf("%I64d\n",lcm);    }    return 0;}
0 0
原创粉丝点击