可被 K 整除的最小整数Java
文章发布较早,内容可能过时,阅读注意甄别。
# 题目
给定正整数 k ,你需要找出可以被 k 整除的、仅包含数字 1 的最 小 正整数 n 的长度。
返回 n 的长度。如果不存在这样的 n ,就返回-1。
注意: n 不符合 64 位带符号整数。
示例 1:
输入:k = 1
输出:1
解释:最小的答案是 n = 1,其长度为 1。
示例 2:
输入:k = 2
输出:-1
解释:不存在可被 2 整除的正整数 n 。
示例 3:
输入:k = 3
输出:3
解释:最小的答案是 n = 111,其长度为 3。
提示:
- 1 <= k <= 105
# 思路
易证,有2和5因子时无解 由欧拉定理可知,没有2和5因子时必有解 从1开始枚举即可
# 解法
class Solution {
public int smallestRepunitDivByK(int K) {
if(K % 2 == 0 || K % 5 == 0){
return -1;
}
int res = 1;
int len = 1;
while(res % K != 0){
res = res % K;
res = res * 10 + 1;
len++;
}
return len;
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 总结
- 分析出几种情况,然后分别对各个情况实现