Codeforces Round #360 (Div. 2) D. Remainders Game

在这篇博客中,讨论了Pari和Arya玩的一个名为'余数游戏'。Pari选择两个正整数x和k,Arya需要找出x除以k的余数。游戏的目标是,基于给定的k和古代数字,判断Arya是否有独立于x的获胜策略。文章通过示例解释了游戏规则,并提出了一个解决方案:计算所有古代数字的最小公倍数(LCM),然后检查这个LCM是否能被k整除。如果可以,Arya有获胜策略;否则,没有。
摘要由CSDN通过智能技术生成
D. Remainders Game
time limit per test
1 second
memory limit per test
256 megabytes
input
standard input
output
standard output

Today Pari and Arya are playing a game called Remainders.

Pari chooses two positive integer x and k, and tells Arya k but not x. Arya have to find the value . There are n ancient numbers c1, c2, ..., cn and Pari has to tell Arya if Arya wants. Given k and the ancient values, tell us if Arya has a winning strategy independent of value of x or not. Formally, is it true that Arya can understand the value for any positive integer x?

Note, that means the remainder of x after dividing it by y.

Input

The first line of the input contains two integers n and k (1 ≤ n,  k ≤ 1 000 000) — the number of ancient integers and value k that is chosen by Pari.

The second line contains n integers c1, c2, ..., cn (1 ≤ ci ≤ 1 000 000).

Output

Print "Yes" (without quotes) if Arya has a winning strategy independent of value of x, or "No" (without quotes) otherwise.

Examples
Input
4 5
2 3 5 12
Output
Yes
Input
2 7
2 3
Output
No
Note

In the first sample, Arya can understand because 5 is one of the ancient numbers.

In the second sample, Arya can't be sure what is. For example 1 and 7 have the same remainders after dividing by 2 and 3, but they differ in remainders after dividing by 7.


题意:给你n和k,然后给你n个数ci,问你是否存在x,能整除所有的ci且能整除k


思路:直接求ci的LCM,然后查看是否可以整除k就可以了



ac代码:

#include<stdio.h>
#include<math.h>
#include<string.h>
#include<stack>
#include<set>
#include<queue>
#include<vector>
#include<iostream>
#include<algorithm>
#define MAXN 1010000
#define LL long long
#define ll __int64
#define INF 0xfffffff
#define mem(x) memset(x,0,sizeof(x))
#define PI acos(-1)
#define eps 1e-8
using namespace std;
ll gcd(ll a,ll b){return b?gcd(b,a%b):a;}
ll lcm(ll a,ll b){return a/gcd(a,b)*b;}
ll powmod(ll a,ll b,ll MOD){ll ans=1;while(b){if(b%2)ans=ans*a%MOD;a=a*a%MOD;b/=2;}return ans;}
double dpow(double a,ll b){double ans=1.0;while(b){if(b%2)ans=ans*a;a=a*a;b/=2;}return ans;}
//head
int main(){
    int n,k;scanf("%d%d",&n,&k);
    ll ans=1;
    for(int i=0;i<n;i++){
        ll x;scanf("%I64d",&x);
        ans=lcm(ans,x)%k;
    }
    if(ans==0)
        printf("YES\n");
    else
        printf("No\n");
    return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值