hdu1222:gcd的应用

本文通过分析狼按固定间隔搜索兔子的问题,探讨了安全洞穴的存在条件。文章给出了两种算法实现,一种基于模运算判断,另一种利用最大公约数确定两数是否互质,最终得出互质条件下不存在安全洞穴。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

                                                                              G - Wolf and Rabbit

There is a hill with n holes around. The holes are signed from 0 to n-1. 



A rabbit must hide in one of the holes. A wolf searches the rabbit in anticlockwise order. The first hole he get into is the one signed with 0. Then he will get into the hole every m holes. For example, m=2 and n=6, the wolf will get into the holes which are signed 0,2,4,0. If the rabbit hides in the hole which signed 1,3 or 5, she will survive. So we call these holes the safe holes. 

Input

The input starts with a positive integer P which indicates the number of test cases. Then on the following P lines,each line consists 2 positive integer m and n(0<m,n<2147483648). 

Output

For each input m n, if safe holes exist, you should output "YES", else output "NO" in a single line. 

Sample Input

2
1 2
2 2

Sample Output

NO
YES

思路,开始的时候我考虑了分情况的模运算:

1.如果m=1,肯定是NO;

2.如果n%m=0,肯定是YES;

3.如果n%m!=0,肯定是NO;

代码如下:

#include<stdio.h>
int main()
{
	int n,a,b,i;
	scanf("%d",&n);
	while(n--)
	{
		scanf("%d%d",&a,&b);
		if(a==1)	
		{
			printf("NO\n");
			continue;
		}
		if(b%a==0||a%b==0)
			printf("YES\n");
		if(b%a!=0||a%b!=0)
			printf("NO\n");
	}
	return 0;
}

但是很不幸,我wa了。原来我少考虑了一种情况,比如6和4模运算不等于零,应该输出NO,但实际上是YES。

后来知道了,这题就是求两数互质的。为什么呢?如果假设狼不能够走完每个洞,那么只可能是它一直在那几个固定的洞兜圈子。也就是说他走了几圈之后又回到了原点,并不断循环下去。还拿6和4举例子,我们知道n和m的最小公倍数=n*m/最大公约数,那么6和4的最小公约数=12.也就是说每走12步,狼就转了一圈,回到原点。只有当最大公约数为1,也就是两数互质时,狼能够走完每个洞。

AC代码如下:

#include<stdio.h>
int gcd(int a,int b)
{
	return b?gcd(b,a%b):a;
}
int main()
{
	int n,a,b,i;
	scanf("%d",&n);
	while(n--)
	{
		scanf("%d%d",&a,&b);
		if(gcd(a,b)==1)
			printf("NO\n");
		else
			printf("YES\n");
	}
	return 0;
}

如果关于gcd和lcm不懂的,可以看我的另一篇博客,专门介绍了最大公约数和最小公倍数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小小的香辛料

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值