素数を求めるプログラムを使って、処理速度の計測とパフォーマンスチューニングをしてみよう!
Q1
範囲の始点と個数を入力させ。素数を表示する。
その際、実行にかかった時間を表示する。
[ヒント]
以下を用いることで実行時間が求められる
long start = System.currentTimeMillis(); //処理 long end = System.currentTimeMillis(); long time=end -start;
[実行例]
素数を探します。 範囲の始点となる数を入力(2以上)>100000000 いくつ探しますか>5 100000000以上の素数を5個探しました {100000007,100000037,100000039,100000049,100000073} time:1634ms
class Q1{ public static void main(String[] args){ Scanner s=new Scanner(System.in); System.out.println("素数を探します。"); //2以上の始点を入力させる int begin; do{ System.out.print("範囲の始点となる数を入力(2以上)>"); begin=s.nextInt(); }while(begin<2); //1以上の個数を入力させる int num; do{ System.out.print("いくつ探しますか>"); num=s.nextInt(); }while(num<1); //計測開始 long start = System.currentTimeMillis(); //配列生成 int[] primes=new int[num];; //素数判定 for(int i=begin,count=0;count<num;i++){ int j=2; for(;j<i;j++){ if(i % j == 0){ break; } } if(i==j){ primes[count++]=i; } } //計測終了 long end = System.currentTimeMillis(); //出力 System.out.println(begin+"以上の素数を"+num+"個探しました"); System.out.print("{"); for(int i=0;i<primes.length;i++){ System.out.print(i==primes.length-1? primes[i]:primes[i]+","); } System.out.println("}"); //経過時間表示 System.out.println("time:"+(end - start) + "ms"); } }
Q2
上記のコードはパフォーマンスチューニングを行なっていないため遅い。
ソースコードを改善し、処理速度を向上させよ。
コメント