hdu1222-Wolf and Rabbit

http://acm.hdu.edu.cn/showproblem.php?pid=1222

将环转换成首尾相接无限延长的直线...........1,2,3,4........n , 1, 2, 3, 4,.....n ,1, 2, 3 , 4,..........

如果需要找到兔子,就以为着需要遍历所有的山洞,而且每一次所到达的山洞的位置,不能是相同的,否则,就会产生“死”循环。

假设 跳跃的距离为X,山洞长度为N,  那么X Mod N 有一个数值N1(就是山洞编号),2*X Mod N为N2 ,3*X Mod N 为 N3.。。。。。直到k* x %N 为N(n -1 )...就是取余后每一个位置都有唯一的数值。

          现在我们假设在  1 ~  N 个山洞中间存在 I * X  和 j *  X Mod N 处于相同的位置,那么就有 I * X  Mod N  ==  j * X Mod N ; 即 ( i -  j )* X  % N == 0 ;变形得 ( i - j ) * x  == k * N ;   现在要求X 与N 互质 ,那么N (假设为组合数)== P1 * P2 * P3.....PN ( P 为质因子 ),则 N 的质因子一定在 i - j 中找到, 就是说 N是(i - j ) 的因子 ;又因为 I 和 j  都属于1 ~ N , 所以与架设矛盾 , 因此 ,无法找到满足 ( i - j ) 能整除 N 的 i 和 j ,所以,只需要 X 和 N 互质即可

#include<iostream>
#include<cstdio>

using namespace std; 


int gcd( int a , int b ) 
{
	return b == 0 ? a : gcd( b , a % b ) ;
}

int main()
{
	int Case , m , n ;
	cin >> Case ;
	while( Case-- )
	{
		cin >> m >> n ;
		if( gcd( m , n ) == 1 )
			cout << "NO" <<endl ;
		else
			cout << "YES" << endl ;
	}
	return 0 ;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值