1.手动打表

当需要的数据范围较小时,比如下面的40个

int prime[40]={0,1,1,1,0,1,0,1,0,0,0,1,0,1,0,0,0,1,0,1,0,0,0,1,0,0,0,0,0,1,0,1,0,0,0,0,0,1,0,0};
//素数打表,因为n最大是20,所以只要打到40

2.按定义(耗时长)

最基本的方法是通过素数的定义直接判断,只能被1和它本身整除的数就是素数了。这种方法适合判断单个数是否为素数,当要求一个范围内素数而这个范围又比较大时,这种方法就不太使用了,甚至程序要运行几分钟才能算出结果。

int i,n,x;while(scanf("%d",&n)!=EOF){x=(int)sqrt(n);for(i=2;i<=x;i++)if(n%i==0)    break; if(i>x)    printf("YES\n");else       printf("NO\n");}

3.普通筛选法求素数

出现一个数,则把已这个数为因子的数都标记为合数。

如2,所以4,6,8 10....都标记为合数

如3,所以9,12,15.....都标记为合数

如4,所以16,20,24...都标记为合数

即,若i是素数,则从 j=i*i 开始,把 j+i , j+2i , j+3i .....都标记为合数 (因为2*i , 3*i,4*i,....(i-1)*i 分别是2,3,4,...i-1的的倍数,已经在i之前标记过,所以从j=i*i开始标记)

筛法的思想是去除要求范围内所有的合数,剩下的就是素数了,而任何合数都可以表示为素数的乘积,因此如果已知一个数为素数,则它的倍数都为合数。

int main()
{int n=100;int a[100000]={0};int m=sqrt(n+0.5);for(int i=2;i<=m;i++) if(!a[i])for(int j=i+i;j<=n;j+=i) a[j]=1;for(int i=2;i<=n;i++)if(!a[i]) printf("%d ",i);return 0;
}

版本二:

素数筛法是这样的:
   1.开一个大的bool型数组prime[],大小就是n+1就可以了.先把所有的下标为奇数的标为true,下标为偶数的标为false.
   2.然后:
      for( i=3; i<=sqrt(n); i+=2 )
      {   if(prime)
          for( j=i+i; j<=n; j+=i ) prime[j]=false;
      }
    3.最后输出bool数组中的值为true的单元的下标,就是所求的n以内的素数了。

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;
}

4.注意!!!!!!!

高效筛选法求素数(我是通过九九乘法表想通的(*^▽^*))

普通的线性筛法虽然大大缩短了求素数的时间,但是实际上还是做了许多重复运算,比如2*3=6,在素数2的时候筛选了一遍,在素数为3时又筛选了一遍。如果只筛选小于等于素数i的素数与i的乘积,既不会造成重复筛选,又不会遗漏。时间复杂度几乎是线性的。

   /*
遇到素数需要打表时,先估算素数的个数:
num = n / lnx;
num为大概数字,越大误差越小(只是估计,用于估算素数表数组大小)
这个打表法效率貌似很高,网上说几乎达到了线性时间(不知道是真是假=。=)
*/#include<iostream>#include<string.h>#include<stdio.h>#include<stdlib.h>#define maxn 10000000bool visit[maxn+1000000];int prime[maxn],n; ///prime的大小大概估计一下再开数组。大概是(x/lnx)void getprime(){memset(visit, false, sizeof(visit));int num = 0;for (int i = 2; i <= n; ++i){if ( !visit[i] )  prime[++num] = i;for (int j = 1; j <= num && i * prime[j] <= n ;  j++){visit[ i  *  prime[j] ]  =  true;if (i % prime[j] == 0) break; //此处是重点,避免了很多的重复判断,比如i=9,现在素数是2,3,5,7,进入二重循环,visit[2*9]=1;visit[3*9]=1;这个时候9%3==0,要跳出。因为5*9可以用3*15来代替,如果这个时候计算了,i=15的时候又会被重复计算一次,所以这里大量避免了重复运算。}}}int main(){scanf("%d",&n);getprime();return 0;}

素数打表法(四种方法)相关推荐

  1. 素数打表(4种方法)

    1既不是素数也不是合数 打表:是一种典型的用空间换时间的做法,一般指将所有可能需要用到的结果事先计算出来,这样以后后面需要用到时就可以直接查表获得. 在什么情况下我们需要打表? (1)在程序中一次性计 ...

  2. Database之SQLSever:SQLSever数据表管理(GUI法/SQL语句命令法两种方法实现建立表、修改表,以及增、删、改、查)之详细攻略

    Database之SQLSever:SQLSever数据表管理(GUI法/SQL语句命令法两种方法实现建立表.修改表,以及增.删.改.查)之详细攻略 目录 一.两种方法建立表.修改表,插入多条数据记录 ...

  3. 增加表空间大小的四种方法

    增加表空间大小的四种方法 Meathod1:给表空间增加数据文件 ALTER TABLESPACE app_data ADD DATAFILE 'D:\ORACLE\PRODUCT\10.2.0\OR ...

  4. mvc ajax提交html标签,Mvc提交表单的四种方法全程详解

    Mvc提交表单的四种方法全程详解 2019-01-05 编程之家 https://www.jb51.cc 编程之家收集整理的这篇文章主要介绍了Mvc提交表单的四种方法全程详解,编程之家小编觉得挺不错的 ...

  5. Java解决Hash(散列)冲突的四种方法--开放地址法(线性探测,二次探测,伪随机探测)、链地址法、再哈希、建立公共溢出区

    Java解决Hash(散列)冲突的四种方法--开放地址法(线性探测,二次探测,伪随机探测).链地址法.再哈希.建立公共溢出区 参考文章: (1)Java解决Hash(散列)冲突的四种方法--开放地址法 ...

  6. HTML前端页面颜色的四种方法,色号表

    HTML前端页面颜色的四种方法,色号表 颜色的三种表示方式: (1)单词:red green black-用法: <font color="pink" size=" ...

  7. python求两个数的最大公约数穷举法_C++求最大公约数四种方法解析

    C++求最大公约数的四种方法思路,供大家参考,具体内容如下 将最近学的求最大公约数的四种方法总结如下: 第一种:穷举法之一 解释:拿其中一个数出来,用一个临时变量(tem)保存,每次都把那两个数除以这 ...

  8. 链表反转的四种方法(栈、头插法、三指针法、递归法)

    单链表反转或转置的四种方法 链表的反转实质上是反转链表上的内容: 若链表存储的数据是:1->2->3->4->5; 那么反转后则是:5->4->3->2-&g ...

  9. python 多重列表去重_Python对列表去重的多种方法(四种方法)

    Python对列表去重的多种方法(四种方法) 无聊统计了下列表去重到底有多少种方法.下面小编给大家总结一下,具体内容详情如下: 开发中对数组.列表去重是非常常见的需求,对一个list中的id进行去重, ...

  10. 【数论】求组合数的四种方法

    组合数的常用公式 零.纯暴力法 根据第一个公式,将的分子和分母求出,再相除即可. 适用范围:n,m较小的情况下. 时间复杂度: 第一种部分代码如下: for(int i = n; i >= n ...

最新文章

  1. Linux:检查当前运行级别的五种方法
  2. Go基础知识学习(6) 接口
  3. NoSQL生态系统——类似Bigtable列存储,或者Dynamo的key存储(kv存储如BDB,结构化存储如redis,文档存储如mongoDB)...
  4. php word转pdf linux,Linux平台中使用PHP把word转pdf的实现方法
  5. MatConvnet工具箱文档翻译理解(3)
  6. 使用shell脚本实现自动SSH互信功能
  7. 以太坊源码分析——BlockChain
  8. win8.1和wp8.1共用代码,需要注意的一些问题
  9. 推荐:Dapper扩展-Dapper.SimpleCRUD
  10. 代理模式(Proxy) 静态
  11. 人工神经网络到底能干什么?到底在干什么?
  12. 迅捷pdf转换器——PDF批量转化成JPG
  13. java直播在线人数怎么做_添加抖音直播间在线人数怎么做
  14. CKEditor配置使用
  15. 有奖体验 CODING 产品,iPad Pro、HHKB 键盘等超级礼包等你来!
  16. 约翰霍普金斯大学计算机专业,约翰霍普金斯大学计算机科学专业介绍_计算机科学专业排名及就业方向和前景-小站留学...
  17. c语言区间内质数和合数各自输出
  18. 《番茄工作法图解》全书笔记
  19. FreeCodeCamp学习--Slasher Flick
  20. 【GNN报告】ICT敖翔:图机器学习应对金融欺诈对抗攻击

热门文章

  1. PhotoSweeper for Mac v4.3.0 – 重复照片查找删除工具
  2. 多迪技术部告诉你菜鸟如何学习Python?
  3. 【ABTest】一款简单易用的ABTest开源库
  4. Python爬虫数据可视化
  5. python打开文件时,找不到文件 FileNotFoundError: [Errno 2] No such file or directory报错
  6. python开发的连连看小游戏
  7. 【采购订单报错‘请输入净价’】
  8. EasySwoole教程
  9. 新交所凯利板迎来首个IPO
  10. 抖音上的c语言动态爱心代码,教程:利用Excel 制作 抖音上的心形动态函数图像 ,可以用来表白哈...