hide handkerchief |
Time Limit: 10000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) |
Total Submission(s): 5050 Accepted Submission(s): 1676 |
Problem Description The Children’s Day has passed for some days .Has you remembered something happened at your childhood? I remembered I often played a game called hide handkerchief with my friends.
|
Input There will be several test cases; each case input contains two integers N and M, which satisfy the relationship: 1<=M<=100000000 and 3<=N<=100000000. When N=-1 and M=-1 means the end of input case, and you should not process the data.
|
Output For each input case, you should only the result that Haha can find the handkerchief or not.
|
Sample Input
|
Sample Output
|
Source HDU 2007-6 Programming Contest
|
Recommend xhd |
题目分析:这中体实际上判断一下输入的两个数n,m是否互质就行了。如果在使用辗转相除法求得的最大公约数是1,则证明是互质,否则就不是互质
关于辗转相除法求最大公约数的流程:
典型例题: 一.辗转相除法 例1 。求两个正数8251和6105的最大公因数。 (分析:辗转相除→余数为零→得到结果) 解:8251=6105×1+2146 显然8251与6105的最大公因数也必是2146的因数,同样6105与2146的公因数也必是8251的因数,所以8251与6105的最大公因数也是6105与2146的最大公因数。 6105=2146×2+1813 2146=1813×1+333 1813=333×5+148 333=148×2+37 148=37×4+0 则37为8251与6105的最大公因数。 以上我们求最大公因数的方法就是辗转相除法。也叫欧几里德算法,它是由欧几里德在公元前300年左右首先提出的。 1. 为什么用这个算法能得到两个数的最大公因数? 利用辗转相除法求最大公因数的步骤如下: 第一步:用较大的数m除以较小的数n得到一个商q0和一个余数r0; 第二步:若r0=0,则n为m,n的最大公因数;若r0≠0,则用除数n除以余数r0得到一个商q1和一个余数r1; 第三步:若r1=0,则r1为m,n的最大公因数;若r1≠0,则用除数r0除以余数r1得到一个商q2和一个余数r2; …… 依次计算直至rn=0,此时所得到的rn-1即为所求的最大公因数。
代码如下:
/*
* b.cpp
*
* Created on: 2015年1月27日
* Author: Administrator
*/
#include <iostream>
#include <cstdio>
using namespace std;
/**
* 求最大公约数
*/
int gcd(int a,int b){
int temp;
while(b != 0){
temp = b;
b = a%b;
a = temp;
}
return a;
}
int main(){
int n,m;
while(scanf("%d%d",&n,&m)!=EOF,n!=-1){
if(gcd(n,m) == 1){
printf("YES\n");
}else{
printf("POOR Haha\n");
}
}
return 0;
}