我的任务是创建一块matlab代码,使用Eratosthenes的筛子找到最多为N的素数列表。我创建了一个循环,找到非素数,然后找到它们的索引值2到N的列表。如何让我的程序逐个元素地获取这些索引值并将我的零矩阵中的相应位置设置为1?
同样对于我的作业,我不能使用in built 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:如何结束工作,我猜它会增加k直到达到N. 感谢
答案 0 :(得分:2)
假设你的零点矩阵被称为“numbersthatareprime”而你的主要指数被称为“主要指数”:
numbersthatareprime(primeindices)=1
答案 1 :(得分:1)
这只是使用你的数组索引你的向量的问题。因此,创建一个长度为N
的全零的向量,然后假设您有N
的素数列表,称为prim
,只需执行:
vec = zeros(1, N);
vec(prim) = 1;
答案 2 :(得分:0)
行
由于OP仍然可能会混淆,我只会给出一个新答案(与我之前的错误答案不同)
x=zeros(100,1);
for i=2:100;
x(2*i:i:end)=1;
end; find(~x)
您只需要从2*i
而不是i
....
答案 3 :(得分:-2)
你真的不需要矩阵。只是一个值列表!
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)
来获得素数!