力扣每日一题:能被k整除的最小整数

给定正整数 k ,你需要找出可以被 k 整除的、仅包含数字 1 的最 小 正整数 n 的长度。

返回 n 的长度。如果不存在这样的 n ,就返回-1。

注意: n 可能不符合 64 位带符号整数。

思路:

本题主要借用了余数的一些定理。即:

(a+b)mod m=((a mod m)+(b mod m)) mod m

(a*b) mod m = ((a mod m)*(b mod m)) mod m

因此,可以得到一个结论,当遇到相同的余数时,则表示不存在这样的n。

下面我将说明这个结论怎么得到的:

假设有m1个1和有m2个1,余数一致(m1<m2)。

则可以得到(m2-m1) mod k=((m2 mod k)-(m1 mod k)) mod k=0.因为m1和m2 mod k相同。

此时观察m2-m1的组成:(m2-m1)个1,和m1个0组成,也就是(m2-m1)个1,乘以m1个10.

观察这时候的m1*10。假如10 mod k不为0,则表示m1 mod k等于0或者m2-m1个1 mod k等于0,则在获得m2之前,就已经有了答案。

假如10 mod k为0,则k必定含有因数5或2。但是任何由全1构成的数字,一定不含有结尾0,一定不能被5或2整除,因此此时一定可以确定无解。

综上,要么在获得m2之前,就有了需要的结果。要么,获得m2,此时可以明确无解。

复制代码
class Solution {
public:
    int smallestRepunitDivByK(int k) {
         
        unordered_set<int>st;
        int num=1,count=1;
        while(!st.count(num)&&num%k)
        {   
            st.insert(num);
            num=num*10+1;
            num%=k;
            count++;
        }
        if(st.count(num))return -1;
        return count;
    }
};
相关推荐
吴长建先生重名了4 分钟前
GitHub Actions部署报表系统踩坑记:幂等性与限
算法
贝壳69029 分钟前
一个2026年2月才上传的库,凭什么敢碰2009年就有人写烂的题目
算法
文丑颜不良啊1 小时前
LeetCode2901~2920题目解析
java·leetcode
贝壳6901 小时前
同一道三亿位选型题,三个AI给了我三个答案,我把它们拉进同一台机器复跑
算法
文丑颜不良啊3 小时前
LeetCode2861~2880题目解析
java·leetcode
岑梓铭3 小时前
《考研408数据结构》第八章(排序)复习笔记
数据结构·笔记
青少儿编程课堂3 小时前
蓝桥杯青少组图形化 + 全国青少年信息素养大赛 + 电子学会图形化考级:校园大富翁经营闯关解析
c++·python·算法·bfs·信息学竞赛
在所不辞兄4 小时前
为什么在新能源汽车电驱与热管理开发中,AI驱动的数字孪生和数据驱动仿真正在部分替代对物理台架与实车标定的依赖?
人工智能·深度学习·神经网络·算法·机器学习
I_belong_to_jesus14 小时前
C++关于分支预测的优化1
开发语言·c++·算法