题目描述
小 A 和小 B 是一对好朋友,他们的爱好是研究数字。学过除法之后,他们就发明了一个新游戏:两人各说一个数字分别为 a 和 b,如果 a 能包含 b 的所有质数因子,那么 A 就获胜。但是当数字太大的时候,两个朋友的脑算速度就有点跟不上了。
现在,请你写个程序,来判断胜负吧:输入两个正整数,表示 a 和 b(2 ≤ a, b ≤1018)。如果 a 包含了 b 的所有质数因子,则输出 “Yes”,否则输出 “No”(输出时没有引号)。
输入格式
输入两个正整数 a 和 b,中间用一个空格隔开。
输出格式
如果 a 包含了 b 的所有质数因子,则输出 “Yes”,否则输出 “No”(输出时没有引号)。
样例 1 输入
120 75
样例 1 输出
Yes
样例 2 输入
7 8
样例 2 输出
No
数据范围
2 ≤ a, b ≤ 1018
算法一 ———— 暴力模拟(90分)
#includeusing namespace std; typedef long long LL; int main() { LL a, b; cin >> a >> b; for(LL i = 2; i * i <= b; i++) { if(b % i != 0) continue; if(a % i != 0) { cout << "No"; return 0; } while(b % i == 0) { b /= i; } } if(a % b == 0) cout << "Yes"; else cout << "No"; return 0; }
算法二 ———— 统计次数(100分)
#includeusing namespace std; typedef long long LL; int main() { LL a, b; cin >> a >> b; int cnt = 0; for(LL i = 2; i * i <= b; i++) { if(cnt >= 5 * 1e7)break; if(b % i != 0) continue; if(a % i != 0) { cout << "No"; return 0; } while(b % i == 0) { b /= i; } } if(a % b == 0) cout << "Yes"; else cout << "No"; return 0; }



