题目描述
求由最小的一个N,N个数码1组成的数能被M整除? 比如M=3时,111能被3整除。M=2时,则不存在这样的N。
输入
第一行是一个整数K(K≤1,000),表示样例的个数。 以后每行一个整数M(1≤M≤1,000,000)
输出
每行输出一个样例的结果,如果不存在这样的N,输出0。
样例输入
5 1 2 3 4 999989样例输出
1 0 3 0 473670
解题思路: 这里我们设 X 是由 N个1 组成的数。
这题该怎么做呢,到底这个最小的N该怎么求,好像没有什么方法可以直接算出来。那怎么办?硬着头皮试吧。
如果有 X % M == 0,是不是就表明,X 可以被M整除,那么就存在这样的一个N,满足题目要求。所以就从最小的1开始,1 不行就试 11,11 不行就试 111,不行再 1111 、11111、 111····111。
若是所有M取值都这样一个一个单纯的尝试,那是不是有点太呆了。我们能不能让它更简单一点?
-
想想看,X 都是由 1 组成的,那它是不是永远不可能被 偶数 和 5的倍数 整除。所以对于这类的 M,不存在X 能被M整除 。这时的 N 一定为 0,这样我们一下就判断出了绝大多数的情况。
-
问题1:那到底要试多少轮?才能找到这样的 X ,或者验证出不存在这样的一个X,可以被M整除。 如果不限制尝试次数的话,就可能一直循环下去,造成死循环。这个问题我们先暂时放一边,等下再来思考。
-
先思考--问题2:随着N的增大, X 会从 1

文章介绍了如何使用模运算解决寻找由1组成且能被特定数M整除的最小数字N的问题。通过分析,可以排除偶数和5的倍数作为M的情况,然后利用模运算的性质,避免数值过大导致的计算问题,通过循环检查在M次以内是否能找到满足条件的N。
最低0.47元/天 解锁文章
1820

被折叠的 条评论
为什么被折叠?



