ECNU 2877 歌德巴赫猜想
阿新 • • 發佈:2021-01-11
ECNU 2877 歌德巴赫猜想
連結
https://acm.ecnu.edu.cn/problem/2877/
題目
單點時限: 4.0 sec
記憶體限制: 256 MB
歌德巴赫猜想,是指對於每一個大於 4 的偶數 ,都能表示成兩個質數之和。
現在,你需要寫程式驗證這一猜想。對於n,找出質數a和b, 滿足a+b=n,a<=b,且 a * b 最大。
例如n=8,滿足條件的a和b分別為 3 和 5;
輸入格式
每行一個偶數n(4 < n <= 20000)
輸出格式
對應於每個輸入的偶數,輸出a、一個空格、b、一個換行符
樣例
input
8
10
1000
output
3 5
5 5
491 509
思路
思路不是很麻煩,就是找到和為n的兩個素數,要求這兩個素數積最大。
如果兩個數越接近,那麼積就越大,這就可以從n/2往兩邊找,套一層迴圈即可,check函式用來檢測是否是素數的。
如果題目要求很高,可以先把素數打表存下來,就避免了check函式的反覆運算。
這題最開始我還runtime error,研究下才發現,我寫的是while(true),難怪超時,改成hasNextInt()即可。
程式碼
public static boolean check(int n) { for (int i = 2; i <= n / 2; i++) { if (n % i == 0) { return false; } } return true; } public static void fun() { Scanner sc = new Scanner(System.in); while (sc.hasNextInt()) { int n; n = sc.nextInt(); if (n > 20000 || n <= 4 || n % 2 != 0) { break; } for (int i = n / 2; i >= 1; i--) { if (check(i) && check(n - i)) { System.out.println(i + " " + (n - i)); break; } } } }