素数都有哪些 素数质数是什么意思( 二 )



......

所以 , 为了达到合数的表达式的唯一性 , 就人为的将1排除在了素数之外 。

5 , 如何求给定范围内的素数
到这里 , 已经知道了素数和合数 。那么如果想要求某个给定的数范围内的素数有哪些 , 应该怎么求 。

比如 , 如何求10以内的素数?

根据常识 , 可以容易的想到10以内的素数有:2,3,5,7

如果不是10 , 而是100以内的素数呢?

难道是依次的去数 , 2,3,5,7,11,13,17,19...

如果不是100 , 而是1000以内的素数呢?

看来人为的靠自己的理解去数 , 会把自己数晕 , 不是解决问题的根本 。

那么应该怎么去解决?

我认为 , 还是得从素数的概念入手:只能被1和自己本身整除的数 。

也就是说 , 除了1和本身 , 不能被其他数整除的数 。或者说 , 只要找到了一个能够被1和本身之外的数整除 , 那么就可以判定这个数就不是素数 。

下面的目标 , 就是努力去找到这样的数 。

先想一下不是素数的数是什么数?答案很明显 , 就是合数 。合数有什么性质?合数可以表示为若干个素数的乘积 。

既然是要求n以内的素数 , 那么肯定n以内的素数一定是在n以内;n以内的合数也是在n以内 。n以内的合数可以表示为若干个素数的乘积 , 这里的素数也肯定是在n以内 。

那么可以确定的知道n以内的某个合数必会至少能够被n以内的一个素数整除 。如果能够找到这样的能够被n以内的合数整除的更大的素数K , 那么就可以得到这样一组素数集(从2开始 , 更大值是K) , 将n以内的整数 , 依次与这组素数中的素数进行求余运算 , 根据求余结果是否是0 , 来判断整数是否是合数 。即求余的结果不是0的整数就是素数了 。

下面的问题是:已知整数范围n , 如何求得能够被n以内的合数整除的更大的素数?

还是从合数的概念出发 , 一个合数必然可以表示为若干个素数的乘积 。

至于合数分解成的素数的个数多少 , 这个就不确定了 , 可能是2个 , 也可能是3个 , 或者更多 。

下面先给出一个结论:

假设一个合数M可以分解为3个素数的乘积 , M=X1*X2*X3(X1<=X2<=X3) , 那么对M进行开3次方根 , 得到的结果取整数为I , I必然介于M的素数的中间 , 即I>=X1且I<=X3 。以整数I内的素数构成一个素数 G , 那么G中必然存在素数X1;合数M越大 , 那么得到的I就越大 , 因而构成的素数 G中的更大的素数也越大 。设想 , 要使得找到更大的素数 , 那么必然要找到更大的I 。在合数M更大的情况下 , 开方根次数越小 , 则此时找到的I才是更大的 。那么开方次数最小是多少呢?显然就是开2次方根时(虽然开1次方根时 , I更大 , 但此时的M就不是合数 , 而是素数了) 。

那么 , 现在知道了 , 如何求一个给定的整数范围内的素数 了:



  1. 首先 , 对给定的整数 , 求平方根 , 得到I1(取整数);


  2. 然后 , 找到I1范围内的所有的素数 , 构成一个 G


  3. 接着 , 依次将给定的整数范围内的整数 , 对 G的素数 , 依次取模 , 若结果是0 , 那么说明这个整数是合数 , 则排除之;否则就是素数 , 保留;


  4. 以上收集的素数就是给定的整数范围内的所有的素数 。


6 , 一个Python求素数的例子
根据上面讨论的  , 现在用Python实现一个程序来求给定的整数范围内的素数 。

素数都有哪些 素数质数是什么意思

文章插图

Python实现的代码(求给定整数范围内的素数)

验证结果:


素数都有哪些 素数质数是什么意思