【问题标题】:Generate prime numbers recursively, Matlab递归生成素数,Matlab
【发布时间】:2014-04-29 00:31:04
【问题描述】:

我正在尝试使用以前的素数递归地生成素数。 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

【问题讨论】:

  • 好吧,mod(2+1, 2) 始终是 mod(3, 2),它是 1,永远不是 0。这是作业吗?
  • 不,这不是家庭作业,这是为了研究。 mod(2+1,2) 是列表的起点,如果这是一个正确的词,所以从那时起,我每次都使用当前的 primlist 来获取更新的 primlist,这就是为什么你会看到 mod(2+ numba,primlist) 因为 2+numba 总是大于 3。
  • 我试图表达的观点是帕拉格在他们的回答中提出的观点。我试图引导你理解(我问的原因是这种寻找素数的方式是一个常见的家庭作业问题,然后我不会给出直接的答案,而是给出提示,这里很标准)。跨度>
  • 在命令窗口中输入edit primes
  • 哦,不,不,哈哈,没有作业,我只是在做数学研究,我的教授告诉我,生成素数比使用内置函数更有效。我将使用素数来计算各种数字的 diviosr 函数。但是感谢您的关注;)

标签: matlab


【解决方案1】:

您一次又一次地初始化您的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

【讨论】:

  • 感谢 parag,这正是我想要的!谢谢!
猜你喜欢
  • 2016-06-13
  • 2021-01-11
  • 1970-01-01
  • 2015-05-14
  • 1970-01-01
  • 2021-05-08
  • 2015-01-27
  • 2019-08-25
  • 2021-05-22
相关资源
最近更新 更多