Today Pari and Arya are playing a game called Remainders.
Pari chooses two positive integer x andk, and tells Arya
k but notx. Arya have to find the value
. There are
n ancient numbers c1, c2, ..., cn and Pari has to tell Arya
if Arya wants. Givenk and the ancient values, tell us if Arya has a winning strategy independent of value ofx or not. Formally, is it true that Arya can understand the value
for any positive integerx?
Note, that
means the remainder ofx
after dividing it by y.
The first line of the input contains two integers n andk (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).
Print "Yes" (without quotes) if Arya has a winning strategy independent of value ofx, or "No" (without quotes) otherwise.
4 5 2 3 5 12
Yes
2 7 2 3
No
In the first sample, Arya can understand
because5
is one of the ancient numbers.
In the second sample, Arya can't be sure what
is. For example1
and 7 have the same remainders after dividing by2 and
3, but they differ in remainders after dividing by7.
重新修正下这篇博客!因学长的教训,重新思考了这个问题!
大体题意:
告诉你k 但不告诉你x 并且告诉你n个ci来,你也知道x%ci,想让你求出x mod k来!问是否有唯一解!
思路:
反证法,假设解不唯一,有x1,x2,那么x1,x2满足:
x1 % ci == x2 % ci 并且x1 % k != x2 % k,所以 (x1 - x2) % ci == 0 ,(x1-x2) % k != 0
并且lcm(c1,c2,,,,cn) % ci == 0
,所以lcm % (x1-x2) == 0.
且 (x1-x2) % k != 0;
所以lcm % k != 0
所以命题: 如果解不唯一,那么lcm % k != 0
逆否命题为: 若lcm % k == 0 那么 解唯一!
所以只需要判断lcm是否k 的整数倍,
也就是说这个问题可以转换为:
是否存在x使得 x是c1,c2,c3,,,cn,k的整数倍!
是的话就是yes,否则就是no!
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
typedef long long ll;
ll gcd(ll a,ll b){
return !b ? a : gcd(b,a%b);
}
ll lcm(ll a,ll b){
return a*b/gcd(a,b);
}
int main(){
// printf("%d\n",gcd(6,13));
int n;
ll k;
scanf("%d%I64d",&n,&k);
ll ans = 1;
bool ok = false;
for (int i = 0; i < n; ++i){
ll x;
scanf("%I64d",&x);
if (ans)
ans = lcm(ans,x) % k;
if (ans == 0)ok=true;
}
if (ok)printf("Yes\n");
else printf("No\n");
return 0;
}

本文介绍了一个名为“余数游戏”的算法挑战,玩家Arya需要根据一系列古代数值和一个特定的k值,推断出未知数x除以k的余数。文章详细解释了解题思路,采用反证法证明了在何种条件下Arya能够确定x模k的值,并提供了一段C++代码实现。
1264

被折叠的 条评论
为什么被折叠?



