比赛描述
赵信——德玛西亚的总管,可谓一人之下,万人之上。但谁能想到,他以前在诺克萨斯的角斗场过的是怎样的生活?
那时,成千上万的奴隶或战俘被抓进角斗场,通过血腥的杀戮供贵族们取乐。所以,为了活下去,除了自身的实力之外,拉帮结派也是必不可少的。显然,这样的事只可能发生在互相信赖的人的中间,而在当时,人们互相信赖的标准却很奇怪——每个人都有一个编号,若两个人可以相互信赖,那么当且仅当这两个编号的素因子集合相同。
那么问题来了:
现在有三个人想组团,请问他们能相互信赖么?
输入
先输入一个正整数T,表示共有T组测试样例,1≤T≤10000。
对于每一个测试样例,输入三个正整数,对于第i个数pi,表示第i个人的编号(1≤pi≤109)。
输出
对于每组样例,如果可以可以成功组团,则输出“YES”,否则输出“NO”。
样例输入
2
3 6 9
3 9 27
样例输出
NO
YES
提示
对于样例一,6的素因子集合为{2,3},与其他人不同,所以不行;
对于样例二,所有数的素因子集合均为{3},因此可以组团。
题目来源
yuman
#include<iostream> int gcd(int a, int b){ int temp; if(a<b){ a ^= b; b ^= a; a ^= b; } while(a%b){ temp = b; b = a%b; a = temp; } return b; } //判断是否所有 a 的因子是 b 的因子 bool fun(int a, int b){ int g=gcd(a,b); while(g!=1){ while(a%g==0){ a /= g; } g = gcd(a,b); } if(a==1){ return 1; }else{ return 0; } } int main(){ int t,a,b,c; scanf("%d",&t); while(t--){ scanf("%d%d%d",&a,&b,&c); if(fun(a,b) && fun(b,a) && fun(a,c) && fun(c,a) ){ printf("YES\n"); }else{ printf("NO\n"); } } }