1015.可被 K 整除的最小整数
题目描述:
给出正整数 k ,需要找出可以被 k 整除的、仅包含数字 1 的最小正整数 n 的长度。如果不存在返回 −1 . n 不符合 64 位带符号整数。
数据范围:
1≤k≤105
题解:
n 会变得很大,不能直接构造,可以考虑使用余数,整除时余数等于 0 .
(p+q)modn=((pmodn)+(qmodn))modn
(p×q)modm=((pmodm)×(qmodm))modm
因此可以通过 n=(n∗10+1)modk 来构造 n 的余数。但是需要确定循环次数。因为 modk ,因此余数只有 [0,k−1] 共 k 种。如果不能整数,那么就是 [1,k−1] 只有 k−1 种。循环 k 次肯定会出现 n 等于了前面某一次的结果,继续下去就会进入循环,因此循环 k 次就行。
还可以使用 n=(n+tmp)modk 来实现,对 tmp 每次 tmp=tmp×10modk 。因为公式2, tmp=((tmpmodk)×(10modk))modk 。同样根据鸽笼原理也会出现 n 等于前面某一次结果的情况。
代码:
1 | class Solution |
v1.5.1