判断101-200之间有多少个素数,并输出所有素数
101-200之间有 21 个素数,它们分别是:101、103、107、109、113、127、131、137、139、149、151、157、163、167、173、179、181、191、193、197、199。
质数又称素数。一个大于1的自然数,除了1和它自身外,不能被其他自然数整除的数叫做质数;否则称为合数(规定1既不是质数也不是合数)。
素性检测:
素性检测一般用于数学或者加密学领域。用一定的算法来确定输入数是否是素数。不同于整数分解,素性测试一般不能得到输入数的素数因子,只说明输入数是否是素数。
素性测试通常是概率测试(不能给出100%正确结果)。这些测试使用除输入数之外,从一些样本空间随机出去的数;通常,随机素性测试绝不会把素数误判为合数,但它有可能为把一个合数误判为素数。误差的概率可通过多次重复试验几个独立值a而减小。
随机素性测试的基本结构:
1、随机选取一个数字a。
2、检测某个包含a和输入n的等式(与所使用的测试方法有关)。如果等式不成立,则n是合数,a作为n是合数的证据,测试完成。
3、从1步骤重复整个过程直到达到所设定的精确程度。
在几次或多次测试之后,如果n没有被判断为合数,那么可以说n可能是素数。
常见的检测算法:费马素性检验(Fermat primality test),米勒拉宾测试(Miller–Rabin primality test) ,Solovay–Strassen测试,卢卡斯-莱默检验法(Lucas–Lehmer primality test)。
筛素数法
筛素数法可以比枚举法节约极大量的时间(定n为所求最大值,m为≤n的质数个数,那么枚举需要O(n^2)的时间复杂度,而筛素数法为O(m*n),显然m<<n,所以时间效率有很大提升。)。如1000000的数据范围,用筛素数法可在2s内解决。