我想弄清楚这段代码的背景是什么,具体来说,是编写命令的原因。直到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)
有人可以帮我理解这段代码吗?
答案 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
循环的每次迭代中,位置primes
中i
数组的元素设置为0
在for
循环结束时,p
当前值的所有倍数都会设置为0
primes(i - 1) = 0;
然后,integers
循环对2
和N
之间的所有while
值重复此过程。
在while
循环结束时,数组primes
将包含2
和N
之间的素数。
primes = primes(primes > 0)
该指令在数组primes
中找到与0不同的数字,并通过为所有与0不同的数字分配所有数字来重新定义数组本身,即相同。它会从数组primes
中删除所有0
s。
根据定义,给定数字的倍数不是素数。
希望这有帮助。