题意:
给你两个数a,b,看b中的所有的质因子是不是都是a 的质因子,如果都是输出Yes, 不是的话No
思路:
比赛的时候题意理解错了,以为只要一个相同的质因子就行了,然后就一直错了
两种方法:
1. GCD的反复应用
不断的去取a,b的最大公约数g,然后用b去整除以g,更新b的值,等到g为1退出,去判断b的值是否为1,是1的话,就是Yes
CODE:
#include<iostream>
#include<algorithm>
#include<string.h>
#include<stdlib.h>
#include<stdio.h>
#define LL long long
using namespace std;
LL gcd(LL a, LL b)
{
return b == 0?a:gcd(b,a%b);
}
int main()
{
LL a, b;
int t;
scanf("%d",&t);
while(t--)
{
cin>>a>>b;
LL g;
g = gcd(a,b);
while(g!=1)
{
b/=g;
g=gcd(a,b);
}
if(b == 1)
{
printf("Yes\n");
}
else
printf("No\n");
}
return 0;
}
PS:
gcd ,不用考虑哪个值大