如何使用Eratosthenes的筛子编写一个列出素数的函数

时间:2013-04-25 18:52:23

标签: matlab primes sieve-of-eratosthenes

我应该编写一个函数或脚本,使用“Eratosthenes筛”找到所有素数p小于给定整数n> 2的函数或脚本,避免不必要的存储(我可以创建长度为n但不多的向量)< / p>

n = input('Enter your number');
v=[1:n];
v(1)=0
for i=2:n
    s=0;
    for j=v(2)
        if i>v(2) &&  mod(i,j)==0
           s=s+1;
        end
    end
    if s>0
      v(i)=0;
    end
end
for i=v(v>v(find(v,1,'first'))):n
s=0;
    for j=v(v>v(find(v,1,'first')))
        if i>v(v>v(find(v,1,'first'))) & mod(i,j)==0
           s=s+1
        end
    end
    if s>0
      v(i)=0;
    end 
end     

v

我意识到这与我应该编写的代码相差甚远。但这是我想到的唯一一个想法,它只删除了可以被2和3整除的数字,我需要找到所有素数,通过对每个条目重复这个。这显然不聪明。但我觉得可以为此创建一个循环。但是我没有编写这个循环的代码。请帮忙。

2 个答案:

答案 0 :(得分:2)

这是伪代码(抱歉,我不知道matlab)。我查看了wikipedia上的算法,并用Java进行了测试。

fill your array with numbers from 2 to N

p=2
while p<=n
    for i=2*p, while i<=N, increment i=i+p
        mark element as 0
    end for
    increment p by 1
end while

print all array elements that are not 0

答案 1 :(得分:2)

将代码从Goran Belfinger的答案翻译成Matlab(恐怕我无法遵循你的OP中的代码):

N = input('Enter your number: ');

primes = 2:N;
p=2;

while (p <= N)
    for i = 2*p:p:N
        primes(i - 1) = 0;
    end;
    p = p + 1;
end

primes = primes(primes > 0)
相关问题