zoukankan      html  css  js  c++  java
  • leetcode1015. Smallest Integer Divisible by K

    题目大意:给定一个正整数k,找到最小的整数n可以被k整除。N是数字1的组合,例如1,11,111,1111...

    这道题的关键:

    1、余数是循环的;

    2、next_mod = (10*pre_mod +1)%k

    证明:已有(a+b)%k =(a%k+b%k)%k

    next_mod = next%k = (10*pre+1)%k = ((10*pre)%k+1%k)%k = (((10*(pre%k))%k +1%k)%k = ((10*pre_mod)%k +1%k)%k = (10*pre_mod+1)%k

    有一点点绕,如果有更简洁的证明方法欢迎留言!

    3、如果K的尾数是2,4,5,6,8的话,一定不存在N。简单说明:我们要求的N结尾一定是1,那么一定不能被2的倍数整除。另外我们知道能被5整除的数字的结尾必须是0或者5,所以得证。

    class Solution(object):
        def smallestRepunitDivByK(self, K):
            """
            :type K: int
            :rtype: int
            """
            if K % 10 not in {1, 3, 7, 9}: return -1
            mod, mod_set = 0, set()
            for length in range(1, K + 1):
                mod = (10 * mod + 1) % K
                if mod == 0:
                    return length
                if mod in mod_set:
                    return -1
                mod_set.add(mod)
            return -1
  • 相关阅读:
    XSS初探
    简单的HTTP服务实现
    WinForm“假死”问题汇总
    Access 数据库的数据类型
    C#应用调试C++ dll的方法
    Visual Studio远程调试
    【汇总】C#编程技巧
    SQL Server常见问题及解决方法
    java订单生成工具类
    JAVA-学习路线
  • 原文地址:https://www.cnblogs.com/a-little-v/p/10816754.html
Copyright © 2011-2022 走看看