hdu-1222-Wolf and Rabbit

hdu1222-Wolf and Rabbit

题目链接戳这里:hdu1222
题意大概是叫你输入m和n,n代表有几个洞,洞的序号分别是0,1,…,n-1,然后先搜第0个洞口,然后第m个洞口,第2m个洞口…如果大于n-1的话会回到开头,相当于一个环。
题解:判断m和n是否互质,如果互质则没有洞口漏掉,如果不互质即两者的最大公约数大于1,那么一定会有洞口被漏掉,这里简单解释一下。
所有被访问的洞口的编号可以表示为 p * m - q * n (p, q为大于等于0的整数且使得该式大于0),如果 m, n 两个数存在一个公约数为 k,那么所有被访问洞口的编号可以表示为 k * ( p * (m / k ) - q * ( n / k ) )显然,p * (m / k ) - q * ( n / k ) 为大于等于1的整数,如果 k > 1,那么编号中将不存在 1,… , k-1,即存在洞口没有被访问。
题解
主要就是会求最大公约数,那么这个代码就没什么问题,这要用到一个定理,假如两个数相除,那么这两个数的最大公约数等于被除数与余数的最大公约数,如果余数为零那么被除数就是最大公约数。

#include<cstdio>
#include<map>
#include<iostream>
#include<string>
using namespace std;
int gcd(int m,int n);
int main()
{
	int m, n, N;
	cin >> N;
	while (N--)
	{
		cin >> m >> n;
		if (gcd(m, n) == 1)
			cout << "NO" << endl;
		else
			cout << "YES" << endl;
	}
	return 0;
}
int gcd(int a, int b)
{
	if (b == 0)
		return a;
	else
		return gcd(b, a%b);
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值