思路:
1. 判斷一個數是否為質數
2. 找出一個範圍內所有質數
3. 找出質數中最大的數
一、判斷一個數是否為質數
寫一個方法,參數為數字,返回值為布林
true:是質數
false:非質數
質數的定義:
在大於1的自然數中,除了1和該數自身外,無法被其他自然數整除的數
因此要判斷
1. 大於一
2. 二至該數減一的取餘不等於零
public boolean isPrime(int number) {
if (number <= 1) {
return false;
}
for (int i = 2; i < number; i++) {
if (number % i == 0) {
return false;
}
}
return true;
}
二、找出一個範圍內所有質數
使用迴圈+第一個方法即可
把質數裝進 List 中
public List<Integer> findPrime(int from, int to) {
List<Integer> primes = new ArrayList<Integer>();
for (int i = from; i <= to; i++) {
if (isPrime(i)) {
primes.add(i);
}
}
return primes;
}
也可以寫一個 overload 方法
public List<Integer> findPrime(int to) {
return findPrime(2, to);
}
三、找出最大質數
使用 findPrime() 取得質數 List
List 中最後一個數即是最大質數
有可能範圍內無質數的情況
因此要判斷後返回0
public int findLargestPrime(int from, int to) {
List<Integer> primes = findPrime(from, to);
if (primes.size() == 0) {
return 0;
}
return primes.get(primes.size() - 1);
}
overload
public int findLargestPrime(int to) {
return findLargestPrime(2, to);
}
測試
System.out.println(isPrime(-17)); //false
System.out.println(isPrime(1)); //false
System.out.println(isPrime(6)); //false
System.out.println(isPrime(11)); //true
System.out.println(findPrime(-20, 20)); //[2, 3, 5, 7, 11, 13, 17, 19]
System.out.println(findPrime(10)); //[2, 3, 5, 7]
System.out.println(findLargestPrime(-20, 20)); //19
System.out.println(findLargestPrime(10)); //7
System.out.println(findLargestPrime(3002, 3010)); //0
結論
雖然題目只要找出最大質數
但藉由拆解與設計
可以讓整支程式更清晰易讀
而且維護性、利用性也提高
例如又多了一個需求
要知道範圍內質數的數量
只要 list.size()
便完事