Codeforces Round #360 (Div. 2) D 數學題
連結:戳這裡
D. Remainders Game
time limit per test1 second
memory limit per test256 megabytes
inputstandard input
outputstandard 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,要求去猜x%k的值,其中n個數ci表示知道了所有的x%ci的值
問能不能知道x%k的值
思路:
根據中國剩餘定理若要求出x%k的值,k=m1*m2*m3*...mn
其中mi互素,且k必須分解成k=p1^a1*p2^a2*...*pn^an (其中pi為素數)
那麼我們只需要判斷所有的ci的乘積能不能分解出一個數Y使得Y==k,由於數太大會爆ll
所以對於當前ci,我們都取出當前所有ci的LCM,再跟k取GCD
那麼這個GCD肯定是k中的一部分,最後判斷所取出來的GCD能否拼成k
程式碼:
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<string>
#include<vector>
#include <ctime>
#include<queue>
#include<set>
#include<map>
#include<stack>
#include<iomanip>
#include<cmath>
#define mst(ss,b) memset((ss),(b),sizeof(ss))
#define maxn 0x3f3f3f3f
#define MAX 1000100
///#pragma comment(linker, "/STACK:102400000,102400000")
typedef long long ll;
typedef unsigned long long ull;
#define INF (1ll<<60)-1
using namespace std;
ll n,K;
ll c[1000100];
ll GCD(ll a,ll b){
return b==0 ? a : GCD(b,a%b);
}
ll LCM(ll a,ll b){
ll gcd=GCD(a,b);
return a*b/gcd;
}
int main(){
scanf("%I64d%I64d",&n,&K);
for(int i=1;i<=n;i++) scanf("%I64d",&c[i]);
ll lcm=1;
for(int i=1;i<=n;i++){
lcm=LCM(lcm,c[i]);
lcm=GCD(lcm,K);
if(lcm==K) {
printf("Yes\n");
return 0;
}
}
printf("No\n");
return 0;
}
相關文章
- Codeforces Round #452 (Div. 2) D
- Codeforces Round 941 (Div. 2) D
- Codeforces Round 960 (Div. 2)(A - D)
- Codeforces Round #673 (Div. 2)(A-D)題解
- 【數論】Codeforces Round #404 (Div. 2)(D)Anton and School - 2
- Codeforces Round #325 (Div. 2) D bfs
- Codeforces Round #250 (Div. 2) A-D
- Codeforces Round #251 (Div. 2) A/B/D
- Codeforces Round #283 (Div. 2) D,E
- Codeforces Round #256 (Div. 2)A-D
- Codeforces Round 960 (Div. 2) 補題記錄(A~D)
- CodeForces Round #951(Div. 2) 補題記錄(A~D)
- Codeforces Round 986 (Div. 2)題解記錄(A~D)
- Codeforces Round 987 (Div. 2)題解記錄(A~D)
- Codeforces Round #224 (Div. 2)(數學、dfs)
- Codeforces Round #358 (Div. 2) D dp
- Codeforces Round #359 (Div. 2) D DFS
- Educational Codeforces Round 34 (Rated for Div. 2) D
- Codeforces Round #290 (Div. 2) A,B,C,D
- Codeforces Round #263 (Div. 2) A-D
- Codeforces Round 720 (Div. 2) A-D
- Codeforces Round #676 (Div. 2) A - D個人題解(E題待補)
- Codeforces Round #360 (Div. 1) D 並查集判奇環並查集
- Codeforces Round #401 (Div. 2)(C,D,E)
- Codeforces Round #321 (Div. 2) D 狀壓dp
- Codeforces Round #288 (Div. 2) A,B,C,D,E
- Codeforces Round #287 (Div. 2)A,B,C,D,E
- Codeforces Round #253 (Div. 2) D. Andrey and Problem
- Codeforces Round #280 (Div. 2 A,B,C,D,E)
- Educational Codeforces Round 170 (Rated for Div. 2) A-D
- Codeforces Round 976 (Div. 2) 題解
- Codeforces Round 983 (Div. 2) 題解
- Codeforces Round #956 (Div. 2)題解
- Codeforces Round 951 (Div. 2) 題解
- Codeforces Round 965 (Div. 2) 題解
- Codeforces Round 963 (Div. 2) 補題記錄(A~D,F1)
- Codeforces Round #320 (Div. 2) [Bayan Thanks-Round] C 數學
- Educational Codeforces Round 142 (Rated for Div. 2) A-D