藍橋杯 演算法提高 素數求和
阿新 • • 發佈:2018-12-19
問題描述
輸入一個自然數n,求小於等於n的素數之和
樣例輸入
2
樣例輸出
2
資料規模和約定
測試樣例保證 2 <= n <= 2,000,000
解題思路
很簡單一個東西,使用一個迴圈,當前這個數如果為素數的話就將這個數加入到 和 裡面
//問題描述
// 輸入一個自然數n,求小於等於n的素數之和
// 樣例輸入
// 2
// 樣例輸出
// 2
// 資料規模和約定
// 測試樣例保證 2 <= n <= 2,000,000
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int n = in.nextInt();
int sum = 0;
for (int i = 2; i < n; i++) {
sum += judgePrime(i,n);
}
System.out.println(sum);
}
//判斷num是不是素數
public static int judgePrime(int num, int n) {
//素數即只能被1和這個數本身整除的數,當其他任意一個數能整除這個數表示這個數不為素數
//我們只需要判斷從1開始到這個數的平方根即可判斷這個數是否為素數
//定義flag判斷數字num是否為素數,如果flag為true表示num為素數,反之num則不為素數
boolean flag = false;
if (num == 2) {
return 2;
} else if (num == 3) {
return 3;
}
// double x = Math.sqrt(num);
for (int i = 2; i <= Math.sqrt(num); i++) {
if (num % i == 0) {
flag = false;
break;
} else {
flag = true;
}
}
if (flag == true) {
return num;
} else {
return 0;
}
}
}