練習 - Sum of Consecutive Prime Numbers

Sum of Consecutive Prime Numbers

題目:一些正整數能夠表示為一個或多個連續質數的和。對某個正整數,列出連續質數的和的表示數。

輸入:輸入一個少於10000的正整數,直至輸入0表示結束

輸出:對於每一個輸入的正整數,列出連結質數的和的表示數,輸出中沒有其它的字元

import java.util.Scanner;

public class SumOfConsecutivePrimeMumbers {
	static final int maxp = 2000, n = 10000; //設定質數表長和輸入值的上限
	static int prime[] = new int[maxp], total = 0; //質數表和表長初始化為0

	public static void main(String[] args) {
		for(int i = 2; i <= n; i++) //預先建立質數表
			if(isprime(i))
				prime[total++] = i;
		prime[total] = n + 1;

		int m;
		Scanner scanIn = new Scanner(System.in); //輸入第1個正整數
        	m = scanIn.nextInt();
        	while(m > 0) { //迴圈,直至輸入正整數0為止
        		int ans = 0; //初始化為0
        		for(int i = 0; m >= prime[i]; i++) { //列舉最小質數
        			int cnt = 0; //求連續質數的和
        			for(int j = i; j < total && cnt < m; j++)
        				cnt += prime[j];
        			if(cnt == m) //若和恰等於m,則累計答案數
        				++ans;
        		}
        		System.out.println(ans + "組表示法"); //輸出答案數
        		scanIn = new Scanner(System.in); //輸入下一個正整數
            		m = scanIn.nextInt();
        	}
	}

	public static boolean isprime(int k) { //判定k是否為質數
		for(int i = 0; i < total; i++)
			if(k % prime[i] == 0)
				return false;
		return true;
	}
}

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

*

驗證碼 * Time limit is exhausted. Please reload CAPTCHA.

這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料