素数を求めるプログラムを使って、処理速度の計測とパフォーマンスチューニングをしてみよう!
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
上記のコードはパフォーマンスチューニングを行なっていないため遅い。
ソースコードを改善し、処理速度を向上させよ。
コメント