递归生成素数,Matlab

递归生成素数,Matlab,matlab,Matlab,我试图使用前面的素数递归地生成素数。默认情况下,2是一个素数,每次我在下一个数字上加1,然后除以之前的素数,例如2+1=3,所以我检查2没有除以3,所以3是素数,所以我存储2和3,到目前为止,下一个将是3+1=4,我将使用我当前的素数列表2和3,看到2除以4,所以它不进入列表,然后我继续4+1,一直到n。关键是每次除以之前的素数,如果达到素数,列表就会更新。请检查我的程序,看看我做错了什么 到目前为止,这是我的程序,但我只得到了3和962,我希望它更新列表,并在每次循环中引用它,以便我每次都可以

我试图使用前面的素数递归地生成素数。默认情况下,2是一个素数,每次我在下一个数字上加1,然后除以之前的素数,例如2+1=3,所以我检查2没有除以3,所以3是素数,所以我存储2和3,到目前为止,下一个将是3+1=4,我将使用我当前的素数列表2和3,看到2除以4,所以它不进入列表,然后我继续4+1,一直到n。关键是每次除以之前的素数,如果达到素数,列表就会更新。请检查我的程序,看看我做错了什么

到目前为止,这是我的程序,但我只得到了3和962,我希望它更新列表,并在每次循环中引用它,以便我每次都可以使用mod(2+numba,primlist):

n=960;
primlist=[];
for numba=2:n  
   if mod(2+1,2)~=0
     primlist=2+1;
   end

   if mod(2+numba,primlist)~=0
     primlist=[primlist;2+numba];
   end
end
primlist

您正在一次又一次地初始化
primlist
。不要那样做。我对你的代码做了更少的修改以使它正确运行。逻辑基本上是正确的。您只需在外部初始化
primlist

n=960;
primlist=2;
for numba=1:n  %Changed 2 to 1
   if mod(2+numba,primlist)~=0
      primlist=[primlist;2+numba];
   end
end
primlist

嗯,
mod(2+1,2)
总是
mod(3,2)
这是一个永远不会为0的1。这是家庭作业吗?不,这不是家庭作业,是为了研究。mod(2+1,2)是列表的一个跳转起点,如果这是一个合适的词,那么从那时起,我每次都使用当前的primlist来获得更新的primlist,这就是为什么你看到mod(2+numba,primlist)作为2+numba总是大于3。我试图指出的点就是Parag在他们的答案中提出的点。我想让你明白这一点(我问的原因是这种寻找素数的方法是一个常见的家庭作业问题,然后我会给出提示,而不是给出一个直接的答案,这里很标准)。在你的命令窗口中键入
编辑素数
。哦,不,不,不,不,没有家庭作业,我只是做数学研究,我的教授告诉我,对于我想做的事情,生成素数比使用内置函数更有效。我将使用素数来计算各种数字的diviosr函数。但谢谢你的关心;)谢谢你,帕拉格,这正是我想要的!谢谢