Problem E: 同源数
Time Limit: 3 Sec Memory Limit: 128 MBSubmit: 1331 Solved: 236
Description
如果x和y的质因子集合完全相同,那么我们就说他们是同源的。
比如说18 = 2 * 3
2,12 = 3 * 2
2;
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
思路:我们知道两个数的gcd就是两个数相同的质因数的乘积。譬如说两个数A,B的 gcd g=2*3*5。
然后A/g=3*4,B/g=5。
很明显,我们只要把A和B不断和g取gcd,然后不断除以这个gcd,这样A和B最终剩下的自然就是不同的质因数的组合的情况了。
如果A和B最终都会变成1,说明A和B的质因子的组合都包含在gcd里,这样的是符合条件的。否则就不符合条件。
#include<bits/stdc++.h>
using namespace std;
const int MAXN=1e5+7;
long long gcd(long long a,long long b)
{
return b?gcd(b,a%b):a;
}
int main()
{
long long a,b;
while(~scanf("%lld%lld",&a,&b))
{
long long g=gcd(a,b);
a/=g;
b/=g;
long long p;
while(gcd(a,g)!=1)
{
p=gcd(a,g);
a/=p;
}
while(gcd(b,g)!=1)
{
p=gcd(b,g);
b/=p;
}
if(a==b&&a==1)puts("Yes");
else puts("No");
}
return 0;
}