http://blog.csdn.net/wxyztuv/article/details/7965556

三个函数,find_prime() 是利用素数表的方法,寻找素数的,find_prime_stupid()是利用另一种传统方法寻找素数的,test_func()用于测试两个函数的速度

测试数据分别是 1000,5000,10000,50000,100000,500000,1000000,2000000,5000000 以内的素数。

[cpp] view plaincopy
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <windows.h>
  4. #include <math.h>
  5. #include <time.h>
  6. #define SIZE 10000000
  7. void find_prime(int n);
  8. void find_prime_stupid(int n);
  9. int test_func(void);
  10. // 建立一个素数表
  11. int prime[SIZE] = {0};
  12. int prime_index = 0;        // 素数表索引
  13. int main(int argc,char **argv)
  14. {
  15. test_func();
  16. return 0;
  17. }
  18. // 速度测试函数
  19. int test_func(void)
  20. {
  21. time_t start_time,end_time;
  22. int test_data[] = {1000,5000,10000,50000,100000,500000,1000000,2000000,5000000,0};
  23. int i_testdata = 0;
  24. printf("\n\nstart testing...\n\n");
  25. // 测试 find_prime() 函数
  26. printf("find_prime():\n");
  27. while(test_data[i_testdata])
  28. {
  29. printf("%d\t\t",test_data[i_testdata]);
  30. time(&start_time);
  31. find_prime(test_data[i_testdata]);
  32. time(&end_time);
  33. printf("%ds\n",end_time - start_time);
  34. ++i_testdata;
  35. }
  36. // 测试 find_prime_stupid() 函数
  37. printf("\n\n");
  38. i_testdata = 0;
  39. printf("find_prime_stupid():\n");
  40. while(test_data[i_testdata])
  41. {
  42. printf("%d\t\t",test_data[i_testdata]);
  43. time(&start_time);
  44. find_prime_stupid(test_data[i_testdata]);
  45. time(&end_time);
  46. printf("%ds\n",end_time - start_time);
  47. ++i_testdata;
  48. }
  49. return 0;
  50. }
  51. // 若n是合数,则n必有小于或等于n的正平方根(根号n)的一个素因子
  52. // 遍历当前素数表,如果当前索引的值不为0,
  53. // 并且值不超过了n的正平方根,并且当前值不能整除i,
  54. // 则检查素数表的下一个素数
  55. // 当素数表循环检查停止,检查停止处的索引值,
  56. // 如果值为0,或者值不能整除i,
  57. // 则将i加入素数表
  58. void find_prime(int n)
  59. {
  60. for(int i = 2; i <= n; ++i)
  61. {
  62. int j = 0;
  63. while(prime[j] && i % prime[j] != 0 && prime[j] <= sqrt(i))
  64. {
  65. ++j;
  66. }
  67. if(!prime[j] || i % prime[j] != 0)
  68. {
  69. prime[prime_index++] = i;
  70. // printf("%d  ",i);
  71. }
  72. }
  73. }
  74. void find_prime_stupid(int n)
  75. {
  76. int is_prime = 1;
  77. for(int i = 2; i <= n; ++i)
  78. {
  79. for(int j = 2; j <= sqrt(i); ++j)
  80. {
  81. if(i % j == 0)
  82. {
  83. is_prime = 0;
  84. }
  85. }
  86. if(is_prime)
  87. {
  88. //  printf("%d  ",i);
  89. }
  90. else
  91. {
  92. is_prime = 1;
  93. }
  94. }
  95. }

利用素数表快速寻找 n 以内的所有素数相关推荐

  1. 输出n以内的所有素数(质数)

    素数(质数):除能被自己和1整除,不能被其他数整除的数叫素数,1和0既非素数也非合数. ***素数一定是不能整除2和3,但不能整除2和3的不一定是素数如35和49 def _odd_iter(n):l ...

  2. 关于快速寻找素数的方法

    利用素数筛选法进行素数的快速查找. 原理很简单,素数一定是奇数,素数的倍数一定不是素数. 思路如下: 预定义N表示10000,即表示查找10000以内的素数,首先定义数组prime[]对N以内的数进行 ...

  3. 快速求素数表——埃氏筛法与欧拉筛法

    快速求素数表--埃氏筛法与欧拉筛法 快速求素数表埃氏筛法与欧拉筛法 埃氏筛法 埃氏筛法原理 埃氏筛法时间复杂度 埃氏筛法代码求出1000000以内的素数并且输出n个素数 欧拉筛法 欧拉筛法原理 欧拉筛 ...

  4. 10000以内素数表(代码块)

    10000以内的素数表(代码块) (打表可直接复制) int a[1230]={0,2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73 ...

  5. python寻找n以内的素数算法

    本文所利用的素数性质是:所有的素数都是奇数,且除2,3外其余素数都出现在6n-1与6n+1这两个数列中 具体代码如下 首先创建一个长度为n的false列表,再将索引为2,3,和6n+1.6n-1这两个 ...

  6. (C++)寻找1-100以内所有素数,复杂度为O(nsqrt(n))与O(nloglogn)的两种方法

    注意:1既不是质数也不是合数,2是质数. 1. 复杂度为O(nsqrt(n)) 原理:先写一个判断整数是否为素数的函数,其复杂度为sqrt(n),其原理是对于一个数n,如果它有除了1和自身之外的因子, ...

  7. 100000以内素数java实验结果截图_寻找100000以内素数(质数)

    方法一 简单的质数寻找就是对1~100000的数进行遍历 方法二 这样的遍历复杂度为O(n2) 进行优化就可以发现偶数不可能为质数,因此质数也不可能含有偶数因子 方法三 经过计算发现所有的质数都满足4 ...

  8. MySQL求n以内素数_C++ 实现求小于n的最大素数的实例

    C++ 实现求小于n的最大素数的实例 枚举就是基于已有知识镜像答案猜测的一种问题求解策略 问题:求小于n的最大素数 分析: 找不到一个数学公式,使得根据N就可以计算出这个素数 我们思考: N-1是素数 ...

  9. 质数表因式分解 c语言,素数表+因式分解+完美数

    1 素数 素数即质数,指在大于1的自然数中,除了1和此整数自身外无法被其它自然数整除的数. 1.1 试除法 该方法用于验证一个数是否为素数.例求x是否为素数,只需要验证1到中是否存在一个数位x的约数, ...

最新文章

  1. Java 集合系列(三)Collection 接口
  2. 设计模式学习-Composite(组合模式)
  3. mongodb [main] Automatically disabling TLS 1.0, to force-enable TLS 1.0 specify
  4. POJ 3690 找星座(2D匹配)(未解答)
  5. 【WS-Federation】到底有多少公司在用WS-Federation
  6. 独立版TP空间内核|知识付费小程序源码
  7. 编写函数实现员工信息录入和输出_Excel---最牛的员工档案模板,非常智能化
  8. cocos 时间函数需要什么引用_与时间赛跑:微盟的数据恢复为什么需要这么长时间...
  9. 【图像融合】基于matlab小波变换全聚焦图像融合【含Matlab源码 1372期】
  10. 第08课:GDB 实用调试技巧( 上)
  11. 理论+实验:LAMP网站服务器部署(超详细版本)
  12. 7、核心芯片说明文档
  13. jqwidgets 国际化- 中文 jqxGrid 中文语言包 gridlocalization
  14. GitHub快速上手指南
  15. cropper.js oppoR9M 跑不起来相关问题==》已解决
  16. 《培生小学英语分级阅读80篇 五年级》勘误表
  17. UIKit 中文文档手册汇总目录
  18. 【计算机网络】——体系结构
  19. html5侧匡下拉注释,可圈可点网资料
  20. 论文阅读 | NIPS‘20 | Beta Embeddings for Multi-Hop Logical Reasoning in Knowledge Graphs

热门文章

  1. phantomjsjava_Java利用Phantomjs实现生成图片的功能
  2. android 蓝牙通讯实现手机蓝牙的开启,并扫描附近可见的蓝牙设备
  3. Python只需要三十行代码,打造一款简单的人工语音对话
  4. kali - Nmap
  5. XAMPP的MYSQL无法启动 -This may be due to a blocked port, missing dependencies,
  6. 基于深度学习的多目标跟踪算法——ReID与MOT的联系
  7. 从动力学角度看优化算法:GAN的第三个阶段
  8. u3d 模版测试 失败_基于Python的HTTP接口自动化测试框架实现
  9. 01 | 顶层设计:微服务生态与 Spring Cloud Alibaba
  10. python mysqldb安装_解决centos7 安装MySQLdb-python 报错 方案