[数值问题]素数筛选

内存限制:128 MB时间限制:1.000 S

题目描述

输入一正整数n(2<=n<=5*10^6),按顺序输出2到n范围内的所有素数。

输入

输入共一行一个数,表示n的值。

输出

输出若干行,每行5个素数,用空格隔开。

样例输入

20

样例输出

2 3 5 7 11
13 17 19

素数在很多应用领域有很重要的用途,寻找一个高效的算法十分重要。例如,找出10000以内的素数可能仅仅是为某个程序做的准备工作,为提高程序的效率,希望在尽可能短的时间内完成。下面介绍一个经典算法——筛选法求素数。

主要思想是以空间换时间,是很常用的一种提高算法效率的方法。这是一种思想,不是一种算法。这种思想的主要应用有以下两种:
第一种是将之前计算的结果保存起来,方便当前计算之用,从而降低计算量。这种思想的典型体现就是动态规划算法,从求解规模较小的子问题开始,逐步递推求解规模更大的子问题,每次计算都将得到的最优结果保存起来,在后面的计算中,利用前面的计算结果求得当前的最优值,然后再保存起来,如此递推下去。

所谓筛选法是指从小到大筛去一个已知素数的所有倍数。以筛选法求10000以内的素数为例,根据素数2可筛去4、6、8、…、9998、10000等数,然后根据索数3可筛去9.6.
12.15,…,9999等数,由于4已被筛去了,下一个用于筛选的素数是5…依此类推,最后剩余的就是10000以内的素数。

具体实现代码如下:

#include<stdio.h>
#define N 5000000//根据题意开一个数组
#include<math.h>
int a[N+1];//全局变量数组
void prime(int n);//筛选素数的函数
int main(void)
{int n,i,b=0;scanf("%d",&n);prime(n);//使用函数筛选for(i=1;i<=n;i++){if(a[i]==1)//输出筛选后剩余的素数{printf("%d ",i);b++;if(b==5)//五个数一行{printf("\n");b=0;//用完初始化}}}return 0;}
void prime(int n)
{int m=0,i,j;for(i=0;i<n;i++)a[i]=1;//给所有数赋值为1a[0]=a[1]=0;//0和1不是素数m=(int)sqrt(n);for(i=2;i<=m;i++)//从二开始依次筛选2,3....的倍数{if(a[i]==1)//筛选过的就不需要进入循环了,如2的倍数有4,4已经被筛选了即a[4]==0不进入循环{for(j=2*i;j<n;j=j+i){a[j]=0;//将不是素数的数赋值为0}}}} 

经典算法——筛选法求素数(素数筛选)相关推荐

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

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

  2. 【C语言】 利用筛选法求100以内的素数

    算法思路: 原理很简单,就是当i是质(素)数的时候,i的所有的倍数必然是合数.如果i已经被判断不是质数了,那么再找到i后面的质数来把这个质数的倍数筛掉. 代码如下: //C语言 筛选法求100以内的素 ...

  3. 用筛选法求100以内的素数

    用筛选法求100以内的素数 所谓筛选法是指埃拉托色尼筛选.埃拉托色尼是古希腊的著名数学家.他采取的方法是,在一张纸上写上1到1000的全部整数,然后逐个判断他们是否素数,找出一个非素数,就把他们挖掉, ...

  4. 问题 F: 筛选法求素数

    时间限制: 1 Sec  内存限制: 0 MB 题目描述 筛选法求素数是一种高效求素数的方法,其具体算法如下: 从2开始把连续的整数放入筛中,首先确定筛中第一个数2是素数.并从筛中晒去所有2的倍数(不 ...

  5. Eratosthenes集合筛选法求素数

    Eratosthenes集合筛选法求素数 算法思想 和数因子,和数因子是从素数中产生的,最小的素数为2,m作为合数因子,从2开始,配合k+=m,删除合数因子的倍数,当m不断扩大时,如当m为5的时候,上 ...

  6. c语言 用筛选法求100以内的素数,使用筛选法求100以内的素数

    使用筛选法求100以内的素数 筛选法介绍 先把N个自然数按次序排列起来. 1不是质数,也不是合数,划去. 第二个数2是质数留下来,而把2后面所有能被2整除的数都划去.2后面第一个没 划去的数是3,把3 ...

  7. 筛选法求N以内的所有素数

    素数:一个数只能被1和它本身整除的数.2是最小的素数 #include <iostream> using namespace std; #define NUM 100 char isPri ...

  8. 用筛选法求100以内的素数(数组)

    用筛选法求100以内的素数,要求使用数组. #include "stdafx.h" #include<iostream> using namespace std; in ...

  9. c语言学习之用筛选法求100之内的素数。

    用筛选法求100之内的素数 首先我们来看一下什么是素数: 素数又称质数.一个大于1的自然数,除了1和它自身外,不能被其他自然数整除: 介绍一下筛选法: 筛选法所谓"筛选法"指的是& ...

最新文章

  1. 清华镜像:zookeeper
  2. 应用ADO.net得到表
  3. react学习(43)----react中将一个元素渲染为 DOM
  4. 安川机器人编程加电弧_安川焊接机器人编程
  5. Windows 10 环境VS报表rdlc 中文乱码解决方案
  6. 【BZOJ3998】弦论(后缀自动机)
  7. oracle切换实例启动,3.1 Oracle体系结构之实例启动与关闭
  8. Druid.jar包
  9. android usb 开钱箱_USB打印机开钱箱
  10. IDEA 打包jar
  11. AspUpload组件的安装及使用方法介绍
  12. 模拟电子技术(学习笔记 1)
  13. 运行服务器(Tomcat)但是到JDBC这一步,一直报错java.lang.NoClassDefFoundError: Could not initialize class DruidDemo
  14. 配置Stratified-Transformer、Point-Transformer系列
  15. 硬盘开盘数据恢复成功,笔记本硬盘开机无法识别到硬盘
  16. ApplePay对接java后台详细代码
  17. IP地址为140.123.0.0的地址是B类地址,若要切割为10个子网,而且都要连接上Internet,请问子网掩码应设为
  18. 圈圈教你玩USB学习总结
  19. 有关3d引擎优化的一些搜索整理
  20. 大文件传输利器HFS的配置及简单使用

热门文章

  1. 10-Element UI
  2. 智慧环保-污水处理远程监控解决方案
  3. 递归求幂集(python)
  4. FMEA软件——新版PFMEA功能分析怎么做?
  5. 2019 Multi-University Training Contest 5
  6. 每周全球科技十大看点(2022.1.10-1.16)
  7. 基于人工蜂群优化的BP神经网络(分类应用) - 附代码
  8. Salesforce 容器化 ISV 场景下的软件供应链安全落地实践
  9. 【数字信号处理及MATLAB实践】
  10. python之安装第三方库失败的解决方法