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;
}

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章