我应该编写一个函数或脚本,使用“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整除的数字,我需要找到所有素数,通过对每个条目重复这个。这显然不聪明。但我觉得可以为此创建一个循环。但是我没有编写这个循环的代码。请帮忙。
答案 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)