如何用matlab求一亿内的素数?

2025-05-23 21:35:10
推荐回答(2个)
回答1:

三以后的偶数都不会是质数,甚至包括五以后的以五为尾数的都不会是质数,以下代码只优化忽略检验大于二的偶数,对五为尾数的数还没忽略,并非最优代码,循环处理次数为1:100000000的一半。
A=2;
for n=3:2:100000000
if isprime(n)
A=[A,n];
end
end

补充一句,就算你数数,一秒一个,一亿秒要多久?根据3600秒一个小时算要27777.7小时,等同于1157.4天,等同于3.17年。当然计算很快,但再快,要找到一个亿以内的所有数也需要相当长时间,除非你让你的计算机够快,有这耐心等。
粗略估算了一下时间,可能是我的pc处理器时钟频率低的原因,只有1.6GHz,在采用以上算法计算十万以内的的素数时,耗时84.7350秒,以此为参考标准,一亿为十万的一千倍,所以耗时约为84735秒,等同1412.25分钟,等同23.5375小时,大概一天时间。

附加寻找十万以内素数耗时算法:
A=2;
now1=clock;
for n=3:2:100000
waitbar(n / steps)
if isprime(n)
A=[A,n];
end
end
now2=clock;
close(h)
dt=now2-now1;
time=dt(4)*60*60+dt(5)*60+dt(6)

回答2:

用isprime函数
isprime(n);
如果n是素数,返回1
如果n是合数,返回0。
for n=1:100000000
i=isprime(n);
if i=1
n
end
end
这个给你的是把结果显示出来的,如果要保存到矩阵的话你可以酌情自己添加。