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 语句的条件了吗?
我有一个在 Windows 7 上运行的 Intel core i3、JDK 1.7.0。