#!/bin/sh for((i=1;i<=100;i++)) do for((k=2;k<=i;k++)) do if [ $k -eq $i ] then echo "$i" break elif [ $(($i%k)) -eq 0 ] then break fi done done
优化版本:(至少提高速度30%)
#!/bin/sh for((i=1;i<=2000;i++)) do for((k=2;k<=i;k++)) do if [ $k -eq $i ] then echo "$i" break elif [ $(($i%k)) -eq 0 ] then break #优化部分,如果除以一个数本身的二分之一后还不为0,那么可以肯 #---定这个数不会再被任何数整除(本身除外) elif [ $k -eq $(($i/2)) ] then echo "$i" break fi done done
测试结果:
列出1-2000里的质数
运行优化前的脚本:
[root@bj ~]# time (sh zhishu.sh)
real 0m11.840s
user 0m11.559s
sys 0m0.248s
运行优化后的脚本:
[root@bj ~]# time (sh zhishu.sh)
real 0m6.617s
user 0m6.444s
sys 0m0.156s