PTA竞速 7-4 哥德巴赫猜想

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

这个题,让我头秃了一晚上在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
经过卑微学习和多次试验,,,,这是最快的代码

#include <bits/stdc++.h>
using namespace std;
bool isSu(int n)
{
    if(n==1||n==4)return 0;
    else if(n==2||n==3||n==5)return 1;
    if(n%6!=1 && n%6!=5)return 0;
    else{
        for (int i = 5; i <= pow(n,0.5); i+=6) {
            if(n%i==0 || n%(i+2)==0)return 0;
        }
    }
    return 1;
}
int main() {
    int a,h;
    while (1){
        cin>>a;
        if(a==0)break;
        else{
            h=0;
            for (int i = 1; i <= a/2; ++i) {
                if(isSu(i) && isSu(a-i))h++;
            }
            cout<<h<<endl;
        }
    }
    return 0;
}

对不起我是个渣渣。。。
在这里插入图片描述
终于在第二天
在这里插入图片描述
在这里插入图片描述
经过大佬指点,以空间为代价换时间,int类型占空间大(4或8字节),所以定义bool类型数组(bool类型只占一个字节)
AC代码:

#include <bits/stdc++.h>
using namespace std;
//bool isSu(int n)
//{
//    if(n==1||n==4)return 0;
//    else if(n==2||n==3||n==5)return 1;
//    if(n%6!=1 && n%6!=5)return 0;
//    else{
//        for (int i = 5; i <= pow(n,0.5); i+=6) {
//            if(n%i==0 || n%(i+2)==0)return 0;
//        }
//    }
//    return 1;
//}
bool prime[32769];
void Prime(){
    for (int i = 2; i <= 32769; i++) {
        prime[i] = true;
    }
    for (int i = 1; i * i <= 32769; i++) {
        if (prime[i]) {
            for (int j = i * i; j <= 32769; j += i) {
                prime[j] = false;
            }
        }
    }
}

int main() {
    int a,h;
    while (1){
        cin>>a;
        if(a==0)break;
        else{
            h=0;
            Prime();
            for (int i = 1; i <= a/2; ++i) {
                if(prime[i] && prime[a-i])h++;
            }
            cout<<h<<endl;
        }
    }
    return 0;
}

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_46039856/article/details/106376021