今天,学习了素数求取的方法,感觉很棒,拿来分享一下。首先,对比一下两种方法:普通求取素数的方法和基于筛选法的素数求取方法。

-普通方法求取素数

普通方法求取素数是根据素数的定义来判断一个数N是否为素数(只有1和它本身能够整除自己)。因此,该方法一般方式是测试1到的N所有数是否整除N,来判断N是否为素数的。代码示例如下:

#include<stdio.h>
#include<math.h>
#define N 10000001
int prime[N];int main()
{int i, j, num = 0;for(i=2; i<N; i++){  for(j=2; j<=sqrt(i); j++)if( j%i==0 ) break;if( j>sqrt(i) ) prime[num++] = i;}for(i=2; i<100; i++) //只输出2-100内的素数if( prime[i] )printf("%d ",i);return 0;
}

这段代码在我的1G内存,单核CPU的云主机上,会运行相当长的时间。

-基于筛选法的素数求取方式

基于筛选法的素数求取方式:用数组的方式存取筛选候选集,根据质数的倍数不是质数,偶数不是质数的原则进行一次次筛选。但是,不知道为什么for循环的结束位置是sqrt(N)?

#include <stdio.h>
#include <math.h>
#define N 10000001
int prime[N];
int main()
{int i, j;for(i=2; i<N; i++){if(i%2) prime[i]=1;else prime[i]=0;}for(i=3; i<=sqrt(N); i++){   if(prime[i]==1)for(j=i+i; j<N; j+=i) prime[j]=0;}for(i=2; i<100; i++)//只输出2-100内的素数if( prime[i]==1 )printf("%d ",i);printf("\n");return 0;
}

基于筛选法的素数求取方式,运行时间短。一部分原因是时间复杂度小,一部分原因是省去了CPU开根号占用的时间。综上,基于筛选法的素数求取方式是一个快速、实用的求取素数的方法。

另外,还可以针对基于筛选法的素数求取方式做进一步的优化。简化数组的占用空间:因为所有的偶数都不是质数(除2之外),所以数组可以只存放奇数,省掉一半的占用空间。

素数筛选法,快速获取素数序列相关推荐

  1. python使用集合实现筛选法求素数-python素数筛选法浅析

    原理: 素数,指在一个大于1的自然数中,除了1和此整数自身外,不能被其他自然数整除的数.在加密应用中起重要的位置,比如广为人知的RSA算法中,就是基于大整数的因式分解难题,寻找两个超大的素数然后相乘作 ...

  2. 因子和(类素数筛选法)

    (忙着A题,总结会慢慢跟上~) 1409: 因子和 Time Limit: 1 Sec Memory Limit: 128 MB [Submit][Status][Web Board] Descrip ...

  3. 51nod 1536不一样的猜数游戏 思路:O(n)素数筛选法。同Codeforces 576A Vasya and Petya‘s Game。

    废话不多说,先上题目. 51nod Codeforces 两个其实是一个意思,看51nod题目就讲的很清楚了,题意不再赘述. 直接讲我的分析过程:刚开始拿到手有点蒙蔽,看起来很难,然后......然后 ...

  4. pku 2635 The Embarrassed Cryptographer 数论——素数筛选法+模拟大数除法

    http://poj.org/problem?id=2635 因为给定的k是两个素数的乘机,所以该数所包含的因子是{1,K,p,q}假设k = p*q p,q为素数,所以只要从小到大枚举小于L的素数, ...

  5. 素数筛选法(埃氏筛 欧拉筛)

    质数筛选法 文章目录 质数筛选法 前言 一.埃氏筛 O(nloglogn)O(nloglogn)O(nloglogn) 二.欧拉筛O(n)O(n)O(n) 总结 前言 当需要大范围内的素数时,例如1e ...

  6. PAT甲题题解-1059. Prime Factors (25)-素数筛选法

    用素数筛选法即可. 范围long int,其实大小范围和int一样,一开始以为是指long long,想这就麻烦了该怎么弄. 而现在其实就是int的范围,那难度档次就不一样了,瞬间变成水题一枚,因为i ...

  7. 南阳理工oj 题目26 孪生素数问题 素数筛选法

    孪生素数问题 时间限制:3000 ms | 内存限制:65535 KB 难度:3 描述 写一个程序,找出给出素数范围内的所有孪生素数的组数.一般来说,孪生素数就是指两个素数距离为2,近的不能再近的相邻 ...

  8. 素数筛选法 (求1~n的素数)

    1.下面是求1~n的素数的一般方法: //求1~n的素数一般方法 #include<iostream> using namespace std; int main() {int n,i,j ...

  9. Python:实现prime sieve eratosthenes埃拉托斯特尼素数筛选法算法(附完整源码)

    Python:实现prime sieve eratosthenes埃拉托斯特尼素数筛选法算法 # flake8: noqa def prime_sieve_eratosthenes(num):prim ...

最新文章

  1. 黑盒测试--因果图法
  2. 电容触摸屏GT911、GT928、GT9147的使用
  3. Confluence 6 找到在创建 XML 备份的时候出现的错误
  4. 最佳调度问题pascal程序
  5. 中学计算机教育未得到重视,新时期中学计算机教学现状和发展趋势研究
  6. j.u.c系列(08)---之并发工具类:CountDownLatch
  7. nodejs异步读取文件与同步读取文件的区别
  8. c# int byte转
  9. JPA与Hibernate的优缺点
  10. python学习笔记(十六)-Python多线程多进程
  11. 关于java中数据类型叙述正确的是( )_关于Java中数据类型叙述正确的是:
  12. 【BZOJ1226】学校食堂(动态规划,状态压缩)
  13. 区块链技术指南:常见问题
  14. Java拦截器和过滤器的作用和区别
  15. android 截屏实现的几种方式
  16. Mysql 计算年龄函数
  17. 实现isprime函数python,怎样才能实现IsPrime()函数
  18. Python库collections中的计数器(Counter)
  19. Java SE 070 Retention及RetentionPolicy详解
  20. 华为S5300系列交换机V200R001SPH027升级补丁

热门文章

  1. 如何解释 Minitab 运行图的主要结果?
  2. 51单片机的PID水温控制器设计
  3. 西门子1214 PID/通信模板 西门子PLC 1214和多台G120西门子变频器Modbud RTU通讯
  4. 毕业设计-基于微信小程序的点餐系统
  5. Postman安装出错.NET Framework 4.5 failed to install
  6. ZED-F9K使用:录制数据+地图查看
  7. RSA---n分解攻击
  8. python画k线图_python自动获取行情数据,并画k线图
  9. 时间段查询将00:00:00更换成23:59:59
  10. Java实现简单的文件复制功能