关于matlab计算素数个数的问题

来源:百度知道 编辑:UC知道 时间:2024/06/18 12:22:13
下面是我写的两个程序,输出r以内的所有素数(r为输入)。
1.
r=input('');
a=[];
for n=2:r
n1=fix(sqrt(n));
n2=2;
while n/n2~=fix(n/n2)&n2<=n1
n2=n2+1;
end
if n2==n1+1
a=[a,n];
end
end
a

2.
r=input('');
mark=[1,zeros(1,r-1)];
t=1;
while t*2<=r
mark(:,t*2)=1;
t=t+1;
end
a=[2];
m=1;
while m<=r
if mark(:,m)==1
m=m+1;
else
a=[a,m];
n=1;
while n*m<=r
mark(:,n*m)=1;
n=n+1;
end
end
end
a

大概思路就是第一个是分别检验奇数的方法,第二个是划去合数的方法。
我认为第二个的程序明显会比第一个程序运行速度快,可是检验的时候,取r=1000000,结果都是输出的竖线闪烁100下左右。
为什么会这样啊?我知道他们的时间复杂度可能相同,可是我认为即使相同,在具体系数上第二个也会有很大的优势啊?为什么啊?
应该没有过界,超内存吧?难道超了内存也能算出来?
如果第二个超了内存,应该在第二步提示啊。。。
而且很奇怪,r=500000计算时间也是差不多的。。。
别的时间我没有仔细统计。。。

matlab处理数据都有一个上界和下届
你是不是 过界了
具体matlab上下界 对于不同的设置 是不一样的

估计是超了内存.
前后两种算法,虽然第二种时间少,但内存消耗也巨大.
所以说,当数值足够大时,第二种算法是不可行的.