首页 > 代码库 > Codeforces 688D Remainders Game 数学
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 数学
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。