利用素数表快速寻找 n 以内的所有素数
http://blog.csdn.net/wxyztuv/article/details/7965556
三个函数,find_prime() 是利用素数表的方法,寻找素数的,find_prime_stupid()是利用另一种传统方法寻找素数的,test_func()用于测试两个函数的速度
测试数据分别是 1000,5000,10000,50000,100000,500000,1000000,2000000,5000000 以内的素数。
- #include <stdio.h>
- #include <stdlib.h>
- #include <windows.h>
- #include <math.h>
- #include <time.h>
- #define SIZE 10000000
- void find_prime(int n);
- void find_prime_stupid(int n);
- int test_func(void);
- // 建立一个素数表
- int prime[SIZE] = {0};
- int prime_index = 0; // 素数表索引
- int main(int argc,char **argv)
- {
- test_func();
- return 0;
- }
- // 速度测试函数
- int test_func(void)
- {
- time_t start_time,end_time;
- int test_data[] = {1000,5000,10000,50000,100000,500000,1000000,2000000,5000000,0};
- int i_testdata = 0;
- printf("\n\nstart testing...\n\n");
- // 测试 find_prime() 函数
- printf("find_prime():\n");
- while(test_data[i_testdata])
- {
- printf("%d\t\t",test_data[i_testdata]);
- time(&start_time);
- find_prime(test_data[i_testdata]);
- time(&end_time);
- printf("%ds\n",end_time - start_time);
- ++i_testdata;
- }
- // 测试 find_prime_stupid() 函数
- printf("\n\n");
- i_testdata = 0;
- printf("find_prime_stupid():\n");
- while(test_data[i_testdata])
- {
- printf("%d\t\t",test_data[i_testdata]);
- time(&start_time);
- find_prime_stupid(test_data[i_testdata]);
- time(&end_time);
- printf("%ds\n",end_time - start_time);
- ++i_testdata;
- }
- return 0;
- }
- // 若n是合数,则n必有小于或等于n的正平方根(根号n)的一个素因子
- // 遍历当前素数表,如果当前索引的值不为0,
- // 并且值不超过了n的正平方根,并且当前值不能整除i,
- // 则检查素数表的下一个素数
- // 当素数表循环检查停止,检查停止处的索引值,
- // 如果值为0,或者值不能整除i,
- // 则将i加入素数表
- void find_prime(int n)
- {
- for(int i = 2; i <= n; ++i)
- {
- int j = 0;
- while(prime[j] && i % prime[j] != 0 && prime[j] <= sqrt(i))
- {
- ++j;
- }
- if(!prime[j] || i % prime[j] != 0)
- {
- prime[prime_index++] = i;
- // printf("%d ",i);
- }
- }
- }
- void find_prime_stupid(int n)
- {
- int is_prime = 1;
- for(int i = 2; i <= n; ++i)
- {
- for(int j = 2; j <= sqrt(i); ++j)
- {
- if(i % j == 0)
- {
- is_prime = 0;
- }
- }
- if(is_prime)
- {
- // printf("%d ",i);
- }
- else
- {
- is_prime = 1;
- }
- }
- }
利用素数表快速寻找 n 以内的所有素数相关推荐
- 输出n以内的所有素数(质数)
素数(质数):除能被自己和1整除,不能被其他数整除的数叫素数,1和0既非素数也非合数. ***素数一定是不能整除2和3,但不能整除2和3的不一定是素数如35和49 def _odd_iter(n):l ...
- 关于快速寻找素数的方法
利用素数筛选法进行素数的快速查找. 原理很简单,素数一定是奇数,素数的倍数一定不是素数. 思路如下: 预定义N表示10000,即表示查找10000以内的素数,首先定义数组prime[]对N以内的数进行 ...
- 快速求素数表——埃氏筛法与欧拉筛法
快速求素数表--埃氏筛法与欧拉筛法 快速求素数表埃氏筛法与欧拉筛法 埃氏筛法 埃氏筛法原理 埃氏筛法时间复杂度 埃氏筛法代码求出1000000以内的素数并且输出n个素数 欧拉筛法 欧拉筛法原理 欧拉筛 ...
- 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 ...
- python寻找n以内的素数算法
本文所利用的素数性质是:所有的素数都是奇数,且除2,3外其余素数都出现在6n-1与6n+1这两个数列中 具体代码如下 首先创建一个长度为n的false列表,再将索引为2,3,和6n+1.6n-1这两个 ...
- (C++)寻找1-100以内所有素数,复杂度为O(nsqrt(n))与O(nloglogn)的两种方法
注意:1既不是质数也不是合数,2是质数. 1. 复杂度为O(nsqrt(n)) 原理:先写一个判断整数是否为素数的函数,其复杂度为sqrt(n),其原理是对于一个数n,如果它有除了1和自身之外的因子, ...
- 100000以内素数java实验结果截图_寻找100000以内素数(质数)
方法一 简单的质数寻找就是对1~100000的数进行遍历 方法二 这样的遍历复杂度为O(n2) 进行优化就可以发现偶数不可能为质数,因此质数也不可能含有偶数因子 方法三 经过计算发现所有的质数都满足4 ...
- MySQL求n以内素数_C++ 实现求小于n的最大素数的实例
C++ 实现求小于n的最大素数的实例 枚举就是基于已有知识镜像答案猜测的一种问题求解策略 问题:求小于n的最大素数 分析: 找不到一个数学公式,使得根据N就可以计算出这个素数 我们思考: N-1是素数 ...
- 质数表因式分解 c语言,素数表+因式分解+完美数
1 素数 素数即质数,指在大于1的自然数中,除了1和此整数自身外无法被其它自然数整除的数. 1.1 试除法 该方法用于验证一个数是否为素数.例求x是否为素数,只需要验证1到中是否存在一个数位x的约数, ...
最新文章
- Java 集合系列(三)Collection 接口
- 设计模式学习-Composite(组合模式)
- mongodb [main] Automatically disabling TLS 1.0, to force-enable TLS 1.0 specify
- POJ 3690 找星座(2D匹配)(未解答)
- 【WS-Federation】到底有多少公司在用WS-Federation
- 独立版TP空间内核|知识付费小程序源码
- 编写函数实现员工信息录入和输出_Excel---最牛的员工档案模板,非常智能化
- cocos 时间函数需要什么引用_与时间赛跑:微盟的数据恢复为什么需要这么长时间...
- 【图像融合】基于matlab小波变换全聚焦图像融合【含Matlab源码 1372期】
- 第08课:GDB 实用调试技巧( 上)
- 理论+实验:LAMP网站服务器部署(超详细版本)
- 7、核心芯片说明文档
- jqwidgets 国际化- 中文 jqxGrid 中文语言包 gridlocalization
- GitHub快速上手指南
- cropper.js oppoR9M 跑不起来相关问题==》已解决
- 《培生小学英语分级阅读80篇 五年级》勘误表
- UIKit 中文文档手册汇总目录
- 【计算机网络】——体系结构
- html5侧匡下拉注释,可圈可点网资料
- 论文阅读 | NIPS‘20 | Beta Embeddings for Multi-Hop Logical Reasoning in Knowledge Graphs
热门文章
- phantomjsjava_Java利用Phantomjs实现生成图片的功能
- android 蓝牙通讯实现手机蓝牙的开启,并扫描附近可见的蓝牙设备
- Python只需要三十行代码,打造一款简单的人工语音对话
- kali - Nmap
- XAMPP的MYSQL无法启动 -This may be due to a blocked port, missing dependencies,
- 基于深度学习的多目标跟踪算法——ReID与MOT的联系
- 从动力学角度看优化算法:GAN的第三个阶段
- u3d 模版测试 失败_基于Python的HTTP接口自动化测试框架实现
- 01 | 顶层设计:微服务生态与 Spring Cloud Alibaba
- python mysqldb安装_解决centos7 安装MySQLdb-python 报错 方案