4270: 同源数
Time Limit: 3 Sec Memory Limit: 128 MB
Submit: 1356 Solved: 249
Description
如果x和y的质因子集合完全相同,那么我们就说他们是同源的。
比如说18 = 2 * 32,12 = 3 * 22;
Input
本题有多组数据(组数 <= 555555)。
每组数据输入形如:
x y
x, y为整数(1 <= x, y <= 1e18)
Output
输出形入:
ans
如果x, y为同源数,那么ans为”Yes”, 不然为”No”.
Sample Input
18 12
2 3
Sample Output
Yes
No
题目链接:http://oj.acm.zstu.edu.cn/JudgeOnline/problem.php?id=4270
题解:
令k=gcd(x, y),让x不断除以k且不断计算k==1?,如果k==1且a==1时,表明x和y的质因子相同,是同源数,否则输出No。
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#include<algorithm>
#include<string.h>
#include<string>
#include<stack>
#include<queue>
#include<set>
#include<sstream>
#include<iostream>
#define INF 0x3f3f3f3f
using namespace std;
typedef long long ll;
ll gcd(ll a, ll b){
return b == 0 ? a:gcd(b, a%b);
}
bool fun(ll a, ll b){
ll k = gcd(a, b);
while(1){
if(k == 1){
if(a == 1) return true;
else return false;
}
a /= k;
k = gcd(a, b);
}
return false;
}
int main(){
ll x, y;
while(scanf("%lld%lld", &x, &y) == 2){
if(fun(x, y)) printf("Yes\n");
else printf("No\n");
}
}