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++){
プログラムが完了するまでに2倍の時間がかかると予想していました。ご想像のとおり、私の質問を読んだので、1分17秒しかかかりませんでした。
プロセッサは、nが2 ^ 32/2を超えた後、ループを実行する必要がないこと、または実行したとしても、ループを実行する必要がないことをどういうわけか知ることができると思いますか? ifステートメントの条件はもうありませんか?
Windows 7で実行されているIntelコアi3、JDK1.7.0があります。