素数を求めるプログラムを使って、処理速度の計測とパフォーマンスチューニングをしてみよう!

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
上記のコードはパフォーマンスチューニングを行なっていないため遅い。
ソースコードを改善し、処理速度を向上させよ。