PAT乙級1007

1007 素數對猜測 (20分)

題目地址:https://pintia.cn/problem-sets/994805260223102976/problems/994805317546655744ios

難搞哦

輸入格式:

輸入在一行給出正整數N數組

輸出格式:

在一行中輸出不超過N的知足猜測的素數對的個數。spa

輸入樣例

20

輸出樣例

4

個人理解

找到全部的從1到N之間的素數,素數相減差值爲2時,素數對個數加1。code

  1. 注意1, 2,都是素數的特殊性。
  2. 判斷素數時,大於2的偶數都不是素數,能夠跳過。
  3. 判斷大於2的數n是否是素數時,只需判斷能不能被3到根號n整除便可,數學的知識,目前我也不知道爲何。

代碼段

#include<iostream>
#include<math.h>
using namespace std;
int main() {
    int number = 0;
    cin >> number;
    int prime[number];
    int index = 0;
    if (number < 3) {
        cout << 0 << endl;
    } else {
        // 外層遍歷,從1到須要判斷的數
        prime[index++] = 1;
        prime[index++] = 2;
        for (int i = 3; i <= number; i += 2) {
            // 若是是除了2 以外的偶數,都不是素數
            if (i > 2 && i % 2 == 0) {
                continue;
            }
            bool flag = true;
            // 須要判斷i是否爲素數的方式,若是有從 3到 (<=)i 的平方根之間的數j,
            // 能夠被j整除,則i不是素數 ,
            int upperLimit = sqrt(i);
            for (int j = 3; j <= upperLimit; j++) {
                // 知足整除,不是素數
                if (i % j == 0) {
                    flag = false;
                    break;
                }
            }
            // 是素數,存儲到prime數組中
            if (flag) {
                prime[index++] = i;
            }
        }
        // 統計相差爲2 的素數對
        int primeCounter = 0;
        for (int i = 1; i < index; i++) {
            if (prime[i] - prime[i-1] == 2) {
                primeCounter++;
            }
        }
        cout << primeCounter << endl;
    }
    return 0;
}
相關文章
相關標籤/搜索