问:1-100之间有几多个素数,并输出所有素数及素数的个数。
这个题面就很容易理解了,数学上对素数的界说是这样的:质数又称素数,指在一个年夜于1的自然数中,除1和此整数自身外,没法被其他自然数整除的数。
换句话说,只有两个正因数(1和自己)的自然数即为素数。比1年夜但不是素数的数称为合数。并且1和0既非素数也非合数。
好了,数学上素数是这样界说,我们应该把它用计算机的语言暗示出来呀。
这里我们就用一种最简单的体例来暗示:
一个数n,要判断它是不是素数,直接用n除以2到n里面所有的数,如果有一个能整除,则这个数n不是素数。如果都不克不及被整除,则这个数是素数。
上面这句话用代码写出来是这样的:
//只要有一个被整除,则跳出循环
到这里,我们仔细想想,有需要一直除到n去吗?谜底是没有需要的,来看一个例子。
好比判断17是不是素数,我们其实只需要计算:
只需要计算以上三个式子,我们就可以判定,17是一个素数。
为什么呢?因为数学知识告诉我们:任何一个数都不成能分化成两个年夜于其平方根的数的乘积呀,肯定只能分化为一个年夜于或等于其平方根,另一个小于或等于其平方根的两个数相乘。
我们知道,17开根号的值是一个4到5之间的数,取int之后就是4,既然我们已经从2一直取余取到了4都没有一个可以整除,那么就没有需要继续计算下去了,因为接下来的数也肯定不克不及被整除。
好了,这样子你能明显感触感染到我们一下子减少了很多计算量,时间复杂度降低了。
以上是知道一个数,判断它是不是素数,这里我们要做的是输出1-100内所有的素数,那么就要有一个双重for循环,一个数一个数地去判断,然后输出素数。
关于求素数,上面的体例是一个最最直接的体例,初学者知道这种体例就可以了。
但其实还有很多比这种体例时间复杂度更低的体例,如果想更进一步探索程序的简洁和美妙,我明天会整理发出来给年夜家参考一下。
这里分享几个很有意思的料想:
哥德巴赫料想(Goldbach Conjecture)年夜致可以分为两个料想(前者称“强”或“二重哥德巴赫料想”后者称“弱”或“三重哥德巴赫料想”):1、每个不小于6的偶数都可以暗示为两个奇素数之和;2、每个不小于9的奇数都可以暗示为三个奇质数之和。
黎曼料想是一个困扰数学界多年的难题,最早由德国数学家波恩哈德·黎曼提出,迄今为止仍未有人给出一个令人完全信服的合理证明。即如何证明“关于质数的方程的所有意义的解都在一条直线上”。
此条质数之规律内的质数月经过整形,“关于质数的方程的所有意义的解都在一条直线上”化为球体质数散布。
料想中的“孪生质数”是指一对证数,它们之间相差2。例如3和5,5和7,11和13,和等等都是孪生质数。
和是产生在第333899位序号质数月的中旬[18±1]的孪生质数。
质数月定位孪生质数产生位置:
游客,如果您要查看本帖隐藏内容请回复