题目解析
首先,我们需要搞清楚一个数学问题,那么就是 1~k 范围内,x的倍数的数量该如何求解。
比如 1~10 范围内,2的倍数有:2,4,6,8,10,共计5个
比如 1~20 范围内,3的倍数有:3,6,9,12,15,18,共计6个
可以发现1~k范围内x的倍数的个数 = k // x,其中//表示整除。
证明也很简单,大家可以自行验证。
因此,我们可以得出1~k范围内:
- x的倍数个数有:k // x 个,假设 A = k // x
- y的倍数个数有:k // y 个,假设 B = k // y
同时,我们还需要关注 1~k 范围内:
- x*y的倍数的个数有: k // (x*y) 个,假设 = C // (x*y)
即 1 ~ k 范围内:
- x倍数且非y倍数的个数有:A - C 个
- y倍数且非x倍数的个数有:B - C 个
我们可以让:
- “x倍数且非y倍数” 的数去 y 国
- "y倍数且