Codeforces Round #360 (Div. 1) B. Remainders Game【lcm】

題目鏈接:https://codeforc.es/contest/687/problem/B

題目大意:有兩個數x,kx,k,給出nn個數c1,c2,,cnc_1,c_2,\dots,c_n,可以知道x%cix\%c_i的值(但是未給出),問你能否唯一確定x%kx\%k的值。

思路:假設不能唯一確定x%kx\%k的值,那麼就假定存在兩個數x1,x2x_1,x_2

使得:x1%k!=x2%kx_1\%k!=x_2\%k,即:(x1x2)%k!=0(x_1-x_2)\%k!=0

且對於每一個cic_i,都有:x1%ci==x2%cix_1\%c_i==x_2\%c_i

那麼:x1%lcm(c1,c2,cn)==x2%lcm(c1,c2,cn)x_1\%lcm(c_1,c_2\dots,c_n)==x_2\%lcm(c_1,c_2\dots,c_n)

即:(x1x2)==tlcm(c1,c2,cn)(x_1-x_2)==t*lcm(c_1,c_2\dots,c_n)

所以:如果lcm(c1,c2,cn)%k!=0lcm(c_1,c_2\dots,c_n)\%k!=0,則不能,否則可以。

AC代碼:

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
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);
}
const int maxn=1e6+10;
int main()
{
    ll n,k;
    scanf("%lld%lld",&n,&k);
    ll ans=1;
    ll tmp;
    while(n--){
        scanf("%lld",&tmp);
        ans=lcm(ans,tmp)%k;
    }
    if(ans!=0){
        printf("No\n");
    }
    else{
        printf("Yes\n");
    }
    return 0;
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章