我是新大一,今天看了一个很简单的比赛发现自己的数学知识不过关。这个代码我看不懂里面的数学方法,不知道为什么这样算出来的就是结果。代码能看懂只是不知道数学方法。求解释,谢谢啊?


我是新大一,今天看了一个很简单的比赛发现自己的数学知识不过关。这个代码我看不懂里面的数学方法,不知道为什么这样算出来的就是结果。代码能看懂只是不知道数学方法。求解释,谢谢啊?


其实很简单,就是先用l/x,得到范围最小值是x的多少倍,如果正好整除,那说明l就是x的倍数,否则将倍数加1,也就是k倍 。那么最小公约数是x的话,另一个最接近的整数就是(k+1)x了,但不如这个整数比范围最大之r大,那么就找不到满足要求的两个不同数了,输出-1,否则满足条件的两个整数就是kx和(k+1)x