XTU-OJ 《C语言程序设计》 1223-Repeat One

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

求由最小的一个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

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值