为了账号安全,请及时绑定邮箱和手机立即绑定

问大佬们一道算法题

/ 猿问

问大佬们一道算法题

慕容0056306 2019-08-19 17:02:51

给定正整数 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都除不尽这个数,要怎么证明并找出哪些数是无解的呢?

查看完整描述

3 回答

?
一凡

N的取值范围很少呀

1

11

111

1111

11111

111111

... 

依次除一下不就知道结果了。

查看完整回答
反对 回复 2019-09-09
?
慕容0056306

热门回答

查看完整回答
反对 回复 2019-08-19
?
慕容0056306

最新回答

查看完整回答
反对 回复 2019-08-19

添加回答

回复

举报

0/150
提交
取消
意见反馈 邀请有奖 帮助中心 APP下载
官方微信