求素数最普及的方法,被称为“筛选法”,或者以其发明者命名为“埃拉托色尼筛法the Sieve of Eratosthenes”,
见百科:
http://baike.baidu.com/view/3784258.htm
其基于的原理是:
在下面这个 gif 动画中,也能看到筛法的一般步骤:(直接把1删去了)
如何用pascal语言实现呢?方法是构造一个数组,类型是boolean,如果 prime[ i ]=true 就表示 i 是个素数。
具体代码如下:
var i,j,n,sum:longint;
prime:array[2..1000000000]of boolean;
begin
readln(n); //输入一个范围,表示求2~n之内的素数;
fillchar(prime,sizeof(prime),true); //先全部设为true;
for i:=2 to trunc(sqrt(n)) do
if prime[i] then //如果 i 是素数,就把 n 以内所有 i 的倍数(自己不算)赋值为false;
begin
for j:=2 to n div i do
prime[i*j]:=false;
end;
for i:=2 to n do //输出;
if prime[i] then write(i,' ');
end.
2013-06-02
#include<iostream>
#include<math.h>
using namespace std;
int vis[1000];//数组元素皆为0
int main(){
for(int i=2;i<=sqr(1000);i++)//筛法除去所有合数
if(!vis[i])
for(int j=2*i;j<1000;j=j+i)
vis[j]=1;
for(int i=2;i<1000;i++)//输出结果
if(!vis[i])
cout<<i<<' ';
}