【发布时间】:2012-11-06 10:45:59
【问题描述】:
public class FactorFinder{
public static void main(String[] args) {
long n = ((long)Integer.MAX_VALUE+1)*2;
boolean isPrime=true;
for(long i=2;i<=n/2;i++){
if(n%i==0){
System.out.println(i + " is a factor of " + n);
isPrime = false;
}
}
if(isPrime == true) System.out.println(n+ " is a prime number");
}
}
我编写了上面的代码来查找因子 n,或者如果它没有任何因子,则打印“n 是质数”。 我在代码中临时设置了 n=2^32 以查看程序完全运行需要多长时间。耗时 1 分 17 秒。
然后我将for循环更改为
for(long i=2;i<n;i++){
并预计完成该程序所需的时间是原来的两倍。如您所料,既然您已经阅读了我的问题,只用了 1 分 17 秒。
我是否认为处理器能够以某种方式知道在 n 大于 2^32 / 2 之后,它不再需要运行循环,或者即使它运行了,它也没有再检查 if 语句的条件?
我有一个 Intel core i3,JDK 1.7.0 在 Windows 7 上运行。
【问题讨论】:
标签: java performance time for-loop processor