matlab输出10000以内的素数,matlab求10000以内的素数

改完的如下:

clear all

disp('10000以内全体素数:')

count=0;

for i=2:10000

j=2; % 每次外循环,j都要从头再来,所以要拿到外循环里.

k=sqrt(i);

while j

if rem(i,j)==0

break

else

j=j+1;

end

if j>k

fprintf('%5d',i) % 给你改成%5d了,要不都挨一块分不出个儿来了.

count=count+1;

if rem(count,13)==0 % 这个if块,要放到判断j>k里,要不会多出好多空行

fprintf('\n')

end

break % 这个最重要,j>k时一定要退出内循环,要不然j会继续运行到等于i才会退出的

end

end

end

不过话说回来,matlab本身就带求n以内素数的函数啊,用primes

比如

>> 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

如果不可以用primes的话,自己编也不用那么复杂啊

给你重新编了个简单的,不太好理解,不过程序简单.

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值