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 数学的主要内容,如果未能解决你的问题,请参考以下文章