【问题标题】:How do I iterate through matrix elements matlab如何遍历矩阵元素matlab
【发布时间】:2017-04-09 00:48:00
【问题描述】:

我的任务是创建一段 matlab 代码,该代码使用 Eratosthenes 的筛子查找最多为 N 的素数列表。我创建了一个循环来查找非素数,然后在其中找到它们的索引值2 到 N 的列表。如何让我的程序逐个元素地获取这些索引值并将我的零矩阵中的相应位置设置为 1?

对于我的任务,我也不能使用内置的 isprime 函数。

到目前为止我的代码:

function [p,c] = sieve(N)

N = input('Please type an integer greater than 1: ');

a = ones(1,N); %Non-primes are set to 0

for k = 2:N

k:k:end 是如何工作的,我猜它会添加 k 直到达到 N。 谢谢

【问题讨论】:

  • 你能举个例子,可能是通过形成一个较小的数组左右?
  • 提出一个新问题。在旧问题之上添加新问题是一种不好的做法。

标签: arrays matlab matrix primes sieve-of-eratosthenes


【解决方案1】:

好的

由于OP可能仍然感到困惑,我将给出一个新的答案(与我之前的错误答案不同)

 x=zeros(100,1);
 for i=2:100; 
    x(2*i:i:end)=1; 
 end; find(~x)

你只需要从2*i而不是i....

【讨论】:

    【解决方案2】:

    这只是使用数组索引向量的问题。因此,创建一个长度为 N 的全零向量,然后假设您拥有最多为 N 的素数列表,称为 prim,只需执行以下操作:

    vec = zeros(1, N);
    vec(prim) = 1;
    

    【讨论】:

      【解决方案3】:

      假设您的零矩阵称为“numbersthatareprime”,而您的素数索引称为“primeindices”:

      numbersthatareprime(primeindices)=1
      

      【讨论】:

      • 小心。 isprime 是一个实际功能。 mathworks.com/help/matlab/ref/isprime.html。这将使具有该变量的函数黯然失色。但是,这是正确的答案,所以为您 +1。
      • V 好点 - 我最近有一个案例,我不小心覆盖了内置的“线条”功能,然后在随后的图中着色线条给我错误时拉出我的头发!
      • :D...我听到了。一种解决方法是使用 builtin 函数,该函数将显式调用该函数的内置版本而不是重载函数:mathworks.com/help/matlab/ref/builtin.html.... 但如果你不这样做当然可以最大限度地减少头痛.
      • 就我而言,直到我查看脚本的最顶部和最底部时,我才意识到我有。在逐行拉入文本文件时,“行”似乎是一个自然变量......不要这样做!
      【解决方案4】:

      你真的不需要矩阵。只是一个值列表!

      X=zeros(10000,1);
      for i=2:100
         X(i:i:end) = 1
      end
      

      这里,索引i:i:end 的意思是

      • [2,4,6,8,...]i==2
      • [3,6,9,...]i==3

      所以它设置所有 2 的倍数,然后设置所有 3 的倍数,等等,创建你的 seive。

      请注意,您只需上到sqrt(N)

      那么你就可以通过find(X) 得到质数!

      【讨论】:

      • 我不认为这是正确的。 i:i:end 循环索引? 2:2:end,然后 3:3:end,然后 4:4:end,等等?这是做什么的?
      • 目标是确定一个二进制矩阵来确定什么是素数。
      • 但是你也在迭代所有的素数和它们的倍数!! 2:100 包括例如5、7、13 - 这些都将设置为 1。
      • 这确定了一个二进制数组,该数组确定什么是素数。 (即零)
      • 啊,是的,你是对的@HughNolan!我会在这里留下这个错误的答案,因为它说明了 OP 必须做的部分事情......
      猜你喜欢
      • 2010-10-20
      • 1970-01-01
      • 2013-04-15
      • 1970-01-01
      • 1970-01-01
      • 2018-02-25
      • 1970-01-01
      • 2017-09-14
      • 1970-01-01
      相关资源
      最近更新 更多