再讲素数筛选法
来源:互联网 发布:php开源b2c商城 编辑:程序博客网 时间:2024/05/17 21:51
今天一个学弟给我看了他以前写的一个素数筛选法,本人拿来与Eratosthenes筛选法对比测试了一下,其时间复杂度应该也是nlogn,实际运行速度在10^7的时候和Eratosthenes筛选法差不多。另外与Eratosthenes优化筛选法相比,它和Eratosthenes筛选法都比Eratosthenes筛选法优化筛选法要慢一点点,都不能筛选10^8内素数。这个筛选法的想法也比较独特,因此拿出来大家研究学习以下。
代码如下:
#include<stdio.h>
int s[10000000];
int main()
{
int n,flag,x;
int i,j,sum;
s[0]=1;
n=1;
for(i=0,sum=1;i<7;i++)//i代表的是10的几次方
{
for(j=sum,flag=1;j<sum*10;j++)
{
if(j>s[n-1])
for(x=1,flag=0;x<n;x++)
{
if(s[x]*s[x]>j)
break;
if(j%s[x]==0)
{
flag=1;
break;
}
}
if(flag==0)
s[n++]=j;
}
sum*=10;
}
for(i=1;i<n;i++)
printf("%d ",s[i]);
printf("\n共有%d个质数\n",n-1);
return 0;
}
这个筛选法的思想和Eratosthenes筛选法差不多,只不过侧重不同,都是利用是否有素数约数判断是否是素数。Eratosthenes筛选法是利用倍数筛选,节省时间,而这个晒选法是利用10以内的素数,来判断10到100中的数是否为素数,利用100以内的素数来判断100到1000以内的数是否为素数,同时以一个数小于一个素数的平方以及合数有素数约数来判断素数节省时间。这个筛选法中的素数数组中第一个数字是一,故输出时从下标为一开始输出。
学弟这么厉害,当学长的也不能太那个啥了。。。努力,变得更强!!!
- 再讲素数筛选法
- 筛选法求素数
- 筛选法求素数
- 筛选法求素数
- Eratoshenes素数筛选法
- 素数--超强筛选法
- 素数筛选法
- 筛选法求素数
- 筛选法求素数
- 筛选法求素数
- 筛选法求素数
- 筛选法求素数
- 筛选法求素数
- 素数筛选法
- 素数筛选法2
- 筛选法求素数/
- 筛选法求素数
- 筛选法求素数
- Java中有效值位数控制
- mysql 性能调优五种方式
- C++单链表
- Game
- cocos2dx 3.x 声音播放、音量调节
- 再讲素数筛选法
- http://write.blog.csdn.net/postedit?ref=toolbar
- 九度OJ:题目 1028 继续畅通工程
- 深度优先搜索
- 笔记-最大子序列
- 关于RxJAVA的一下理解
- HTTP、TCP/IP、UDP 详解
- cocos2d-x 菜鸟实习生学习篇(二)helloworld完全注释
- git基本操作