题目大意:给定两个数a和m,每次a * 2 % m,判断a是否有可能为0.
解题思路:模拟一下,直到循环位置。
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
const int maxn = 1e5 + 5;
int a, m, v[maxn];
bool judge () {
while (v[a] == 0) {
v[a] = 1;
a = a * 2 % m;
if (a == 0)
return true;
}
return false;
}
int main () {
scanf("%d%d", &a, &m);
printf("%s\n", judge() ? "Yes" : "No");
return 0;
}