素数的判断方法总结
发布日期:2021-06-29 05:01:03
浏览次数:2
分类:技术文章
本文共 1821 字,大约阅读时间需要 6 分钟。
参考博客:
一、素数:(质数prime number)定义为在大于1的自然数中,除了1和它本身以外不再有其他因数,素数有无穷多个。
先来两张素数分布表
二、判断一个数n是否为素数
(一)最简单方法(从2到n-1每个数均整除判断)时间复杂度O(n)
int isPrime(int k){ int j; for ( j=2; j
(二)开根号法:从2到n均整除判断,时间复杂度O(n)(原因:素数是因子为1和本身, 如果数c不是素数,则还有其他因子,其中的因子,假如为a,b.其中必有一个大于sqrt(c) ,一个小于sqrt(c) 。所以m必有一个小于或等于其平方根的因数,那么验证素数时就只需要验证到其平方根就可以了。即一个合数一定含有小于它平方根的质因子。)
int isPrime(int n){ int i; for ( i=2; i<=sqrt(n); i++ ) { if(n%i==0) // 如果不为素数返回0 { return 0; } } return 1; // 反之则返回1 }
三、判断1-n个数中的素数,并存下来
(一)开根法
//最普通的方法:#include#include #define N 10000001int prime[N];int main(){ int i, j, num = 0;for(i=2; i sqrt(i) ) prime[num++] = i; }for(i=2; i<100; i++) //由于输出将占用太多io时间,所以只输出2-100内的素数。可以把100改为N if( prime )printf("%d ",i); return 0;}
(二)素数筛选法:就是当i是素数的时候,i的所有的倍数必然是合数。如果i已经被判断不是质数了,那么再找到i后面的质数来把这个质数的倍数筛掉。
一个简单的筛素数的过程:n=30。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 第 1 步过后2 4 ... 28 30这15个单元被标成false,其余为true。 第 2 步开始: i=3; 由于prime[3]=true, 把prime[6], [9], [12], [15], [18], [21], [24], [27], [30]标为false. i=4; 由于prime[4]=false,不在继续筛法步骤。 i=5; 由于prime[5]=true, 把prime[10],[15],[20],[25],[30]标为false. i=6>sqrt(30)算法结束。 第 3 步把prime[]值为true的下标输出来: for(i=2; i<=30; i++) if(prime) printf("%d ",i); 结果是 2 3 5 7 11 13 17 19 23 29 |
算法具体实现
void compute_prime_table() //筛选法求出500000以内的所有素数{ int i,j; p[0] = p[1] = 0; for(i=2;i<=500000;i++) p[i]=1; //初始化 for(i=2;i<=1000;)//对所有小于1000的素数,删除他们的倍数 { for(j=i+i;j<=500000;j+=i) p[j]=0;//删除i的所有倍数 for(i++;!p[i];i++);//找下一个素数} for(i=0,k=0;i<=500000;i++) { if(p[i]) { primes[k]=i; k++;} }}
(三)基于筛选法的素数求取方式
基于筛选法的素数求取方式:用数组的方式存取筛选候选集,根据质数的倍数不是质数,偶数不是质数的原则进行一次次筛选。
#include#include #define N 10000001int prime[N];int main(){ int i, j; for(i=2; i
转载地址:https://blog.csdn.net/zhao2chen3/article/details/82955794 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
表示我来过!
[***.240.166.169]2024年04月17日 06时42分55秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
paip.php调试脱离IDE VC59
2019-04-29
paip.DEVSUIT WEB .NET ASPX网站打开慢的原因
2019-04-29
央行数字货币将取代纸币?这篇文章说明白了
2019-04-29
2020消费金融大变局:科技向下扎根 持牌向上生长
2019-04-29
高质量壁纸网站,满足壁纸控的所有想象!
2019-04-29
游戏英雄联盟高清壁纸,人物角色都包括
2019-04-29
吃货注意接收,精美美食图片壁纸来喽
2019-04-29
眼前一亮的UI设计案例|插画世界里的网页首图
2019-04-29
UI设计灵感|高级黑网页首图就该这样设计
2019-04-29
想要酷炫大气的网页设计?这样做超吸睛
2019-04-29
好看又有趣的404页面设计
2019-04-29
元宵节正月十五主题海报还没设计好,PSD分层模板来喽!
2019-04-29
元宵节电商促销首页设计PSD分层模板
2019-04-29
APP设计灵感|高颜值时钟页面!让每一秒都过得有意义
2019-04-29
值得电商美工借鉴的购物APP页面设计,让人无法自拔
2019-04-29
电商产品页多种出彩表现设计手法!
2019-04-29
分布式与集成
2019-04-29
C#SUM函数改变数据精度问题
2019-04-29
机器翻译/注意力机制
2019-04-29
Transformer介绍
2019-04-29