PTA 7-4 哥德巴赫猜想 (10分)

“这是我和其他选手比谁过题过得更快的游戏”

对于任何大于或等于4的偶数n,存在至少一对素数p1和p2,使得n = p1 + p2 没有人确定这个猜想是否真的成立。然而,对于给定的偶数,可以找到这样的一对素数(如果有的话)。这里的问题是编写一个程序,打印出满足给定偶数的猜想条件的所有素数对数。 一个偶数序列作为输入。可以有很多这样的数字。对应于每个数字,程序应输出上述对的数量。请注意,我们只统计不同的数对,因此不应将(p1,p2)和(p2,p1)分别计为两对不同的对。
 

输入格式:

在每个输入行中给出一个整数。你可以假定每个整数是偶数,并且大于或等于4且小于2的15次方。输入的结尾用数字0表示。

输出格式:

每个输出行应该包含一个整数。输出中不应出现其他字符。

输入样例:

在这里给出一组输入。例如:

6
10
12
0
 

输出样例:

在这里给出相应的输出。例如:

1
2
1


作者: ACM Group
单位: 集美大学
时间限制: 400 ms
内存限制: 64 MB
代码长度限制: 16 KB
 
 1 import java.io.BufferedReader;
 2 import java.io.IOException;
 3 import java.io.InputStreamReader;
 4 import java.util.ArrayList;
 5 public class Main {
 6     public static void main(String[] args) throws IOException {
 7         BufferedReader input=new BufferedReader(new InputStreamReader(System.in));
 8 //        int n=Integer.parseInt(input.readLine());
 9         boolean [] arr=new boolean[32768];
10         for(int i=2;i<32768;i++) {
11             arr[i]=true;
12         }
13         
14         for(int i=2;i<32768;i++) {
15             if(arr[i]) {
16                 for(int j=2*i;j<32768;j+=i) {
17                     arr[j]=false;
18                 }
19             }
20         }
21 //        while(n!=0) {
22 //            boolean [] arr=new boolean[n+1];
23 //            for(int i=2;i<=n;i++) {
24 //                arr[i]=true;
25 //            }
26 //            
27 //            for(int i=2;i<=n;i++) {
28 //                if(arr[i]) {
29 //                    for(int j=2*i;j<=n;j+=i) {
30 //                        arr[j]=false;
31 //                    }
32 //                }
33 //            }
34         ArrayList<Integer>integers=new ArrayList<Integer>();
35         while(true){
36             int n=Integer.parseInt(input.readLine());
37             if (n==0) {
38                 break;
39             }
40             int sum=0;
41             for(int i=2;i<=n/2;i++) {
42                 if(arr[i]&&arr[n-i]) {
43                     sum++;
44                 }
45             }
46             integers.add(sum);
47 //            System.out.println(sum);
48 //            n=Integer.parseInt(input.readLine());
49 //            arr=new boolean[n+1];
50         }
51 for (int i = 0; i <integers.size(); i++) {
52     System.out.println(integers.get(i));
53     
54 }
55     }
56 }

呃。还没来得及看 记得好像是超时 有空回来补充问题。

猜你喜欢

转载自www.cnblogs.com/Flyfishy/p/12163884.html