今、素数を時間内に無限に出力するプログラムを作成していて、30秒間で出力を強制終了させたいのですがうまく30秒間で終了しません。どこを直せばいいか教えていただけませんか。
ここに質問の内容を詳しく書いてください。```ここに言語を入力
コード
import
1 2public class 練習1 { 3 4 public static void main(String args[]) { 5 long start = System.currentTimeMillis(); 6 long dcnt=0; // 秒数表示記録(同じ秒数を何回も表示させないため) 7 long curtime=0; // 現在時刻記録 8 long end=30; // 実行時間(秒) 9 10 int num = 200000000; 11 12 13 14 int cnt = 0; 15 while (System.currentTimeMillis() <= start+end*1000) 16 { 17 curtime=System.currentTimeMillis(); 18 if(((curtime-start)/1000)%2==0 && dcnt!=(curtime-start)/1000) { 19 System.out.println((System.currentTimeMillis()-start)/1000 + "秒経過"); 20 dcnt=(curtime-start)/1000; 21 } 22 List<Integer> primes =isprime2(num); 23 for (int v : primes) { 24 System.out.println(v + " "); 25 26 cnt++; 27 28 29 } 30 } 31 System.out.println("素数の個数:"+cnt); 32 33 System.out.println("実行時間:"+ (curtime-start)/1000.0 + "秒"); 34 } 35 public static List<Integer> isprime2(int num) { 36 37 38 final List<Integer> list = new ArrayList<Integer>(); 39 if (num < 2) { 40 return list; 41 } 42 43 final boolean[] sieve = new boolean[num + 1]; 44 sieve[2] = true; 45 list.add(2); 46 47 for (int i = 3; i <= num; i += 2) { 48 sieve[i] = true; 49 } 50 51 52 for (int i = 3; i <= num; i += 2) { 53 if (sieve[i]) { 54 list.add(i); 55 for (int j = i * 2; j <= num; j += i) { 56 sieve[j] = false; 57 } 58 } 59 } 60 61 return list; 62 } 63 64}
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。