prime: array [1..n] of boolean = all true
for p in 2..sqrt(n) loop
if prime[p] then
m = p*p
while m <= n loop
prime[m] = false
m = m+p
end loop
end if
end loop
很简单的算法,粗略估计是O(n*n^1/2),重写分析后得出结论是O(nlogn)。
一开始的时候我没有按最快情况考虑if prime[p],理论上讲应该是更精确的,但是在计算中发现把我整个导向了一个莫名其妙的地方~~老师的提示是按最坏情况考虑,重写算法,结果得出上面的结论,正在等待老师的批改~~
作算法作业最郁闷的就是总不是很确定自己应该精确到什么程度,太精确了计算不出来,而简单得计算往往又不能达到需要的精确程度,每次做出来一个结果都不知道是不是老师要的,虽然理论上应该不算是错的,纠结……
这个比较郁闷的老师,专注于莫名其妙的细节而不是算法本身,上课讲的算法简单的一塌糊涂~~~好吧,也算是提高一下我的细节,很多时候台粗枝大叶了,磨磨我的性子吧~~