njczy2010 |
2069 |
Accepted |
31MS |
224K |
1351Byte |
G++ |
2014-11-13 13:32:56.0 |
坑爹的无限gcd,,,尼玛想好久,原来要x对y算一次,y再对x算一次,,,
赵信的往事
时间限制(普通/Java) : 1000 MS/ 3000 MS 运行内存限制 : 65536 KByte
总提交 : 20 测试通过 : 2
描述
赵信——德玛西亚的总管,可谓一人之下,万人之上。但谁能想到,他以前在诺克萨斯的角斗场过的是怎样的生活?
那时,成千上万的奴隶或战俘被抓进角斗场,通过血腥的杀戮供贵族们取乐。所以,为了活下去,除了自身的实力之外,拉帮结派也是必不可少的。显然,这样的事只可能发生在互相信赖的人的中间,而在当时,人们互相信赖的标准却很奇怪——每个人都有一个编号,若两个人可以相互信赖,那么当且仅当这两个编号的素因子集合相同。
那么问题来了:
现在有三个人想组团,请问他们能相互信赖么?
输入
先输入一个正整数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
1 #include<cstdio> 2 #include<cstdlib> 3 #include<cmath> 4 #include<cstring> 5 #include<string> 6 #include<iostream> 7 #include<algorithm> 8 #include<set> 9 #define maxi(a,b) (a)>(b)?(a):(b) 10 #define mini(a,b) (a)<(b)?(a):(b) 11 #define N 1000005 12 #define mod 10000 13 #define ll long long 14 15 using namespace std; 16 17 int T; 18 int flag; 19 int a[5]; 20 21 int gcd(int x,int y) 22 { 23 if(y==0) 24 return x; 25 return gcd(y,x%y); 26 } 27 28 void ini() 29 { 30 flag=1; 31 scanf("%d%d%d",&a[0],&a[1],&a[2]); 32 //printf("%d %d %d\n",a[0],a[1],a[2]); 33 sort(a,a+3); 34 } 35 36 37 void cal(int x,int y) 38 { 39 int g; 40 if(x==1 && y==1) return; 41 g=gcd(x,y); 42 x/=g; 43 y/=g; 44 if(x==1 && y==1) return; 45 else if(g==1 && y%x!=0){ 46 flag=0;return; 47 } 48 else{ 49 cal(x,g); 50 } 51 return; 52 //} 53 } 54 55 void solve() 56 { 57 // printf(" sss\n"); 58 cal(a[0],a[1]); 59 cal(a[1],a[0]); 60 if(flag==0) return; 61 // printf(" sss2\n"); 62 cal(a[0],a[2]); 63 cal(a[2],a[0]); 64 } 65 66 void out() 67 { 68 //printf(" oooo\n"); 69 if(flag==1){ 70 printf("YES\n"); 71 } 72 else{ 73 printf("NO\n"); 74 } 75 } 76 77 int main() 78 { 79 // freopen("data.in","r",stdin); 80 scanf("%d",&T); 81 while(T--) 82 // while(scanf("%I64d",&n)!=EOF) 83 { 84 ini(); 85 solve(); 86 out(); 87 } 88 return 0; 89 }
时间: 2024-10-17 15:20:47