Codeforces 688D Remainders Game 数学

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Codeforces 688D Remainders Game 数学相关的知识,希望对你有一定的参考价值。

题意:Pari选了两个数x,k,已知k和n个数c[i],也能"知道"x%c[i],问是否x%k的值是否唯一?
n,k,c[i]<=1e6

假如存在x1,x2满足:x1和x2同余c[i](i=1..n),但是x1%k!=x2%k 则此时不能确定x%k的值,答案为no
即(x1-x2)%c[i]==0 因为lcm(c[1]..c[n])|(x1-x2)
k不整除(x1-x2) k也不整除lcm(c[1]..c[n]) 该条件为必要条件.
证明充分性很简单 构造x1=2*lcm,x2=lcm即可.
注意:求lcm时容易溢出,改为判断gcd(lcm,k)是否等于k.

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=2e6+20;
ll n,c[N];
ll gcd(ll a,ll b)
{
    return b==0?a:gcd(b,a%b);
}
ll lcm(ll a,ll b)
{
    return a*b/gcd(a,b);
}
int main()
{
    ll n,k,x;
    cin>>n>>k;
    ll res=1;
    for(int i=1;i<=n;i++)
    {
        scanf("%I64d",&x);
        res=gcd(k,lcm(res,x));
    }
//    cout<<res<<endl;
    if(res!=k)
        puts("No");
    else
        puts("Yes");
    
    return 0;
}

 

以上是关于Codeforces 688D Remainders Game 数学的主要内容,如果未能解决你的问题,请参考以下文章

EMU8086 将 32 位数除以 16 位数给出意外的 0 余数

codeforces上怎么看测试数据

如何看codeforces做了多少题

codeforces上怎么看测试数据

codeforces比赛后怎么看题解和答案

codeforces是啥?