#86. 判断一个数是不是素数(2~根号n早停法)

判断一个数是不是素数(2~根号n早停法)

题目背景

素数的定义是:如果数字 n 是素数,那么它只能被 1它本身 整除。即 素数只有两个因数

但是,无论任何数字 n 都能被 1n 整除,所以我们可以将范围缩小到:2n2 - n。但是,又由于数字 n 的因数们是对称的,这个 对称轴n\sqrt n

举例说明:一个数的因数是对称的。

数字 因数有哪些?
12 1 2 3|4 6 12
16 1 2 4|4 8 16
20 1 2 4|5 10 20
24 1 2 3 4|6 8 12 24
25 1 5|5 25
30 1 2 3 5|6 10 15 30

⚠️注意:上面表格中的 "|" 就是对称轴。此外,当数字是1625 时,对称轴是 45,由于在数字上无法画竖线,所以在对称轴两边写了一样的数字,也表达的意思是这个数字就是对称轴。

对称轴说明了,一个数字 n 在对称轴 n\sqrt n 之前有一个因数,那么在对称轴之后也必有一个因数。反过来,如果它在对称轴之前没有因数,那么在对称轴之后也不会有任何因数。

那么,范围就可以进一步从 2n2 - n 缩减为 2n2 - \sqrt n,如果在这个范围内找到第三个因数,则数字 n 就不是素数;如果没有找到第三个因数,数字 n 就是素数。

题目提示

1、Python中求 n\sqrt nn ** 0.5n\sqrt n 相当于 n0.5 次方。

2、和上一题目一样,需要使用for-else结构。它的具体逻辑不再详述,请 点击这里 查看。

题目描述

输入一个整数,判断这个数字是不是素数。如果是的话,打印True,否则打印False

题目格式

输入

一个整数 n

输出

True 或者 False,取决于输入的整数n是不是素数。

题目样例

5
True
10
False

题目限制

1、程序应在 1 秒内计算出结束。

2、输入的整数 n 的范围是:2<=n<=100000002 <= n <= 10000000

⚠️:数据范围和之前两道题目,增大了10倍。