求50以内的素数,以下算法做了很大程度的优化。拿出来与大家分析,望有更好的优化算法。
$arr=[ ] #建立一个全局数组 $arr
$arr[0]=2 #第一个位置值存入2
def add_prime(n) #定义方法 将 n以内的奇素数加入$arr
3.step(n,2){|num|$arr <<num if is_prime?num }
#从3开始,取50以内的奇数,并判断将素数存入arr数组中
end
def is_prime?(number) #定义方法 判断一个数是否是素数
j=0 #数组下标
#算法分析:首先判断该数是否大于小于本身素数的平方,
#大于则判断是否整除该素数,等于则证明该数是非素数。
#前俩者不成立,则该数小于素数平方证明该数为素数。
while $arr[j] * $arr[j] <=number
return false if number % $arr[j] ==0
j +=1
end
return true
end
add_prime(50)
print $arr.join(", "),"\n" #转换成字符串输出