题目:
题意:
给定k,以及n个数
ci
,问是否存在
x1,x2
,满足以下两个条件
x1≡x2(mod ci),i∈[1,n]x1≢x2(mod k)
思路:
数论写的少,烦恼跑不了- -
假设
x1<x2
,根据同余定理转化式一
T=x2−x1=ti∗ci,i∈[1,n]
即, T=x2−x1 的最小值为 ci 的最小公倍数,代入式二
x1≢(x1+T)(mod k)Tmodk≠0
至此,题目变为, ci 的最小公倍数是否能被 k <script type="math/tex" id="MathJax-Element-73">k</script>整除,辗转相除即可
代码:
#include <bits/stdc++.h>
using namespace std;
long long gcd(long long a,long long b){
if (a%b == 0)
return b;
else return gcd(b,a%b);
}
int main(){
int n,k;
scanf ("%d %d",&n,&k);
long long t = 1;
for (int i=0;i<n;++i){
int a;
scanf("%d",&a);
t = t * a / gcd(t,a) % k;
}
if (!t)
puts("Yes");
else puts("No");
return 0;
}