ZSTUOJ 4270: 同源数

来源:互联网 发布:淘宝代充平台 编辑:程序博客网 时间:2024/05/23 05:06

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 0x3f3f3f3fusing 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");    } }
0 0