码迷,mamicode.com
首页 > 其他好文 > 详细

Codeforces 688D Remainders Game 数学

时间:2017-08-03 20:16:21      阅读:119      评论:0      收藏:0      [点我收藏+]

标签:简单   blog   end   证明   std   force   color   lcm   a*   

题意: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 数学

标签:简单   blog   end   证明   std   force   color   lcm   a*   

原文地址:http://www.cnblogs.com/HIKARI1149/p/7281262.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!