我如何遍历矩阵元素matlab

How do I iterate through matrix elements matlab

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

另外,对于我的作业,我不能使用内置的 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。 谢谢

假设您的零矩阵称为 "numbersthatareprime" 并且您的素数索引称为 "primeindices":

numbersthatareprime(primeindices)=1

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

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 的倍数等等,创建了你的课程。

请注意,您只需要升至 sqrt(N)

然后你可以find(X)得到质数!

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

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

好的

OP可能还是一头雾水,我就换个新答案吧(和我之前错的差不多)

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

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