这个素数生成方法如何工作?

时间:2015-09-05 19:15:54

标签: matlab

我想弄清楚这段代码的背景是什么,具体来说,是编写命令的原因。直到for循环的第一行,我理解了所有内容,但后来我迷失了第二行:

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)

有人可以帮我理解这段代码吗?

1 个答案:

答案 0 :(得分:3)

代码实现Sieve of Eratosthenes以查找primes numbers

它生成了数组primes,其中包含2 to N

中的整数
primes = 2:N

while循环遍历整数值

while (p <= N)

while循环中的for循环的每次迭代中,p的当前值的倍数是在循环索引变量的值集的定义内生成的i

2*p:p:N

for循环的每次迭代中,位置primesi数组的元素设置为0

for循环结束时,p当前值的所有倍数都会设置为0

primes(i - 1) = 0;

然后,integers循环对2N之间的所有while值重复此过程。

while循环结束时,数组primes将包含2N之间的素数。

primes = primes(primes > 0)

该指令在数组primes中找到与0不同的数字,并通过为所有与0不同的数字分配所有数字来重新定义数组本身,即相同。它会从数组primes中删除所有0 s。

根据定义,给定数字的倍数不是素数。

希望这有帮助。