给定正整数 K,你需要找出可以被 K 整除的、仅包含数字 1 的最小正整数 N。
返回 N 的长度。如果不存在这样的 N,就返回 -1。
示例 1:
输入:1
输出:1
解释:最小的答案是 N = 1,其长度为 1。
示例 2:
输入:2
输出:-1
解释:不存在可被 2 整除的正整数 N 。
示例 3:
输入:3
输出:3
解释:最小的答案是 N = 111,其长度为 3。
提示:
1 <= K <= 10^5
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/smallest-integer-divisible-by-k
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
题目意思就是输入一个K(1 <= K <= 100000),找一个N(N的值可以是1,11,111,1111,11111......),使得N%K=0,找出这个最小的N,输出N的位数。下面是我写的代码。
class Solution { public int smallestRepunitDivByK(int K) { if (K % 2 == 0 || K % 5 == 0 || K < 1 || K > Math.pow(10, 5)) { return -1; } BigInteger N = BigInteger.valueOf(0); BigInteger s= BigInteger.valueOf(10); for (int i = 0;; i++) { N=N.add(s.pow(i)); if (Objects.equals(N.divideAndRemainder(new BigInteger(String.valueOf(K)))[1], new BigInteger("0"))) { System.out.println(N); return i + 1; } } } }
但是卡在K=19927了,调试到几百个1都除不尽这个数,要怎么证明并找出哪些数是无解的呢?
一凡