艾拉斯托尼素数筛选法
2011-12-03 22:54
246 查看
#include<iostream.h>
#include<math.h>
int sieve(int prime[], int n, int k)
{
int i;
for(i=k+1;i<n; i++)
if(prime[i] && prime[i]%prime[k]==0)
prime[i]=0;
k++; //求下一个可用的筛下标
while(prime[k]==0)
k++;
return k;
}
void erat_sieve(int prime[],int n)
{
int i,m,k;
prime[0]=2;
n=n/2;
for(i=1;i<n;i++)
prime[i]=2*i+1;
m=sqrt(n);
k=1;
while(prime[k]<m)
k=sieve(prime,n,k); //用prime[k]作筛子,对数组prime作筛选
}
void main()
{
int prime[10000];
int i,n,cnt;
cout<<"输入一个正整数作为区间最大值"<<endl;
cin>>n;
erat_sieve(prime,n);
cnt=0; //cnt用于统计prime总的素数个数
for(i=0;i<n/2;i++)
if(prime[i])
{
cnt++;
if(cnt%8==0)
{ //每行输出8个素数
cout<<prime[i]<<" ";
cout<<endl;
}
else
cout<<prime[i]<<" ";
}
cout<<endl;
cout<<"1到"<<n<<"之间的素数个数="<<cnt;
cout<<endl;
}
#include<math.h>
int sieve(int prime[], int n, int k)
{
int i;
for(i=k+1;i<n; i++)
if(prime[i] && prime[i]%prime[k]==0)
prime[i]=0;
k++; //求下一个可用的筛下标
while(prime[k]==0)
k++;
return k;
}
void erat_sieve(int prime[],int n)
{
int i,m,k;
prime[0]=2;
n=n/2;
for(i=1;i<n;i++)
prime[i]=2*i+1;
m=sqrt(n);
k=1;
while(prime[k]<m)
k=sieve(prime,n,k); //用prime[k]作筛子,对数组prime作筛选
}
void main()
{
int prime[10000];
int i,n,cnt;
cout<<"输入一个正整数作为区间最大值"<<endl;
cin>>n;
erat_sieve(prime,n);
cnt=0; //cnt用于统计prime总的素数个数
for(i=0;i<n/2;i++)
if(prime[i])
{
cnt++;
if(cnt%8==0)
{ //每行输出8个素数
cout<<prime[i]<<" ";
cout<<endl;
}
else
cout<<prime[i]<<" ";
}
cout<<endl;
cout<<"1到"<<n<<"之间的素数个数="<<cnt;
cout<<endl;
}
相关文章推荐
- 筛选法求素数
- 用筛选法求素数
- pku 3292 Semi-prime H-numbers 数论素数筛选的变形
- 素数筛(筛选法求素数)
- 筛选法求素数
- jzxx1131 聪明的小地鼠(筛选法求素数)
- 线性筛选素数。。。。线性哦
- 给定范围的素数筛选(POJ 2689)
- 素数筛选法
- hdu3826 素数筛选
- C++筛选法求素数(简单)
- HDU 4715 (素数筛选)(2015排位1-H)
- 素数筛选算法
- Java 素数筛选法
- [数学] AOJ 0009 素数筛选 Prime Number
- 筛选法求素数 打表
- HDU2303(数论)大整数求余+素数筛选
- 素数筛选
- 素数筛选
- Prime Path(素数筛选+bfs)