素数专题

素数筛法
根据定义:一个自然数,如果不能被他平方根以内的所有素数整除,则是素数

 

#include <iostream>
#include 
<cstring>
using namespace std;

const int MAX_SIZE = 10000
;

char prime[MAX_SIZE + 1
];

int
 main()
{
    
int
 i,j;
    
//2是素数,其倍数都是偶数,可通过程序过滤

    for(i = 3; i <= sqrt(MAX_SIZE); i++)
        
if(!
prime[i])
        
{//筛选从种子的平方开始,其平方以内的数均已被前面的素数筛过了(j = i*i)
            for(j = i * i; j <= MAX_SIZE; j += 2 * i)
        
//步长用种子的二倍,若用种子做步长,则有一半为偶数

                prime[j] = 1;
        }

    
for(i = 2; i <= MAX_SIZE; i++)
        
if(i % 2 && !
prime[i])
            cout
<<i<<" "
;
    
return 0
;
}



 

posted on 2009-03-06 19:15  Xredman  阅读(141)  评论(0编辑  收藏  举报

导航