【发布时间】:2018-11-27 06:21:00
【问题描述】:
我正在做名为 Prime Generator 的 SPOJ 挑战,但是在 BASH 中,法官说
时间限制 超过
代码给出了请求的结果,这个算法在 C++ 和 Java 中被接受了
#!/bin/bash
read ITERATIONS
for (( i=0; i<$ITERATIONS; i++ ))
do
read START END
for (( j=$START; j<=$END; j++ ))
do
isPrime=1
if [ $j -eq 1 ]
then
isPrime=0
fi
for (( k=2; k*k<=$j; k++ ))
do
if (($j % $k == 0))
then
isPrime=0
break
fi
done
if [ $isPrime -eq 1 ]
then
echo "$j"
fi
done
done
我的问题是,我怎样才能加快这段代码的速度?我是否做了一些愚蠢的事情来减慢它的速度?
【问题讨论】:
-
查看wikipedia article,它也使用循环,但增量为 6 而不是 1
-
rosettacode.org上的替代实现
-
枚举并仅测试您的范围 START...END 中的奇数,并通过从 3 到 END 的 sqrt 的素数对其进行测试,您需要事先单独查找。
标签: bash performance generator primes