111是质数吗(111是质数)

圈圈笔记 57

题目解析:

这是一道模拟题

最容易想到的就是直接暴力求解,但是由于需要计算的数据范围超过了长整型(long long ),因此如果暴力求解,只能拿到部分分数。

我们可以换个思路:

既然是求判断一个数是否能够整除,容易想到的是求公因子,由于题目要求除数是一个质数(11 111 11111...等),所以该方法行不通。

我们还能想到,平时我们用除法运算的时候,我们是一部分一部分地相除,无论多大的数,都可以按照规则运算。大家可以对照一下下面的规则:

整数的除法法则

1)从被除数的高位起,先看除数有几位,再用除数试除被除数的前几位,如果它比除数小,再试除多一位数;

2)除到被除数的哪一位,就在那一位上面写上商;

3)每次除后余下的数必须比除数小。

除数是整数的小数除法法则:

1)按照整数除法的法则去除,商的小数点要和被除数的小数点对齐;

2)如果除到被除数的末尾仍有余数,就在余数后面补零,再继续除。

看到这是不是已经有点思路了呢?

为了直观形象,这里就拿输入样例给大家举个例

首先我们需要找到所谓的光棍数,要满足除法运算规则,首先要满足被除数大于除数。所以我们就要从输入的数据开始,找到第一个比输入数据大的光棍,样例输入31,所以我们找到的第一个比3大的光棍就是111了。

接下来我们就从 111 开始与31相除,得到 3

余数为 18,按照除法规则,被除数小于除数,要在余数后面再加上一位相除。即变成181,在与31相除,得到 5 余数为 26,在加上一位变成 261 再与 31 相除…以此类推,直到余数为零退出计算。

代码实现:

代码测试:

样例

自己输入一个最大的数据,没有超时。

可以看到,运行时间只有4ms,时间复杂度为常数级。

上一篇:

下一篇:

  推荐阅读

分享