[gdgzoi] Wolf and Rabbit

初学数论,拿一道基础题开刀,整理整理思路

 

题目如下

Description

有一个有n洞个的山丘。 洞从0到n-1标号。

一只兔子必须隐藏在其中一个洞里。 一只狼按逆时针顺序搜索兔子。 他进入的第一个洞是与标号为0的一个洞。然后他会进标号加m的那个洞。 例如,m = 2和n = 6,狼将进入被标记为0,2,4,0的孔。 如果兔子隐藏在1,3或5号的洞里,她就会生存下去。 所以我们把这些洞叫做安全的洞。 

Input

输入开始是表示测试用例数的正整数P. 然后在以下P行上,每行包括2个正整数m和n(0 ,n <2147483648)。  

Output

对于每个输入m,n,如果存在安全洞,则应输出“YES”,否则在单行中输出“NO”。

Sample Input

2

1 2

2 2

 

Sample Output

NO

YES

 

根据题意,我们要找出0~n-1中哪些不能由 动态过程0+k*m 得到,因为过程在圈中循环进行,我们可以知道,当存在满足条件的数 i 时,有

i+pn=qm

变形可得不定方程

an+bm=i

当存在 i 使得不定方程无解时就存在狼抵达不了的安全洞

又由裴蜀定理,不定方程ax+by=c存在整数解的条件是当且仅当c为d的整数倍(其中d=gcd(x,y)),则若使不定方程成立,必有 i%d==0

那我们知道了,只要存在一个 i 使得等式不成立,安全洞就存在

这意味着若安全洞不存在,等式对于任意 i 恒成立,显然,此时 d=1,所以我们只用判断gcd(n,m)是否等于1即可,算法复杂度O(1)

发现自己组织语言并写出来的过程比实际思考花的时间长太多了。。。但是还好在整理思路的过程中头脑清晰了很多,不亏不亏

花了这么久才写好,果然我还是太菜了么

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值