求用matlab编写一段求10000以内的素数的编程

求用matlab编写一段求10000以内的素数的编程

第一种方法:
matlab本身就带求n以内素数的函数,叫primes()
所以最简单的就是直接用primes(1000)
篇幅关系我用100举例,比如
>> primes(100)

ans =

Columns 1 through 17

2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59

Columns 18 through 25

61 67 71 73 79 83 89 97

第二种方法:
另外matlab自带的还有一个判断某数是否为素数的函数,叫isprime()
用这个编程的话,

p = 2; % 2是第一个素数
for i = 3:2:10000 % 其他素数一定是奇数,所以从3开始的奇数来判断
if isprime(i)
p = [p i]; % 如果i是素数,在p后面增加一个i值。
end
end
p

第三种方法:
如果用系统自带的函数的话
n=10000;
p = 1:2:n; % 找出奇数,因为除了2的所有素数都是奇数
q = length(p);
p(1) = 2; % 第一个素数为2
for k=3:2:sqrt(n)
if p((k+1)/2) % 如果p((k+1)/2)也就是p中原本应该等于k的那个数不为0的话
p((k+1)/2+k:k:q)=0;
% 这句的作用就是把p中所有能被k整除的数设为0,但不包括k本身。
% (k+1)/2是奇数k在p中的位置,(k+1)/2+k代表p中除了k本身之外的第二个能被k整除的数的位置,依此类推
end
end
p=p(p>0); % 把等于0的,也就是原来位置上的数是合数的去掉

fprintf('%d以内的素数有:\n',n);
q=length(p);
for k=1:13:q
fprintf('%5d',p(k:min(q,k+12))); % 每行输出13个数
fprintf('\n');
end来自:求助得到的回答
温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-04-08
j=1;
B(1)=1;
for i=1:10000
g=0;
A=1:i;
s=size(A,2);
for k=1:s
if(mod(i,A(k))==0)
g=g+1;
end
end
if g==2
j=j+1;
B(j)=i;
end

end
%%%素数保存在B矩阵中
第2个回答  2017-10-15
function f=era(n)
f1=zeros(2,n-1);
for i=2:n
f1(1,i-1)=i;
f1(2,i-1)=0;
end
for i=2:n/2
for j=(i+1):n
if f1(2,i-1)==0
x=rem(f1(1,j-1),f1(1,i-1));
if x==0
f1(2,j-1)=1;
end
end
end
end
f2=zeros(1,n-1);
j=0;
for i=2:n
if f1(2,i-1)==0
f2(1,i-1)=f1(1,i-1);
j=j+1;
end
end
f=zeros(1,j);
j=1;
fori=2:n
if f2(1,i-1)==0
else
f(1,j)=f2(1,i-1);
j=j+1;
end
end