1. 程式人生 > >PAT(Basic Level) Practice——1007 素數對猜想

PAT(Basic Level) Practice——1007 素數對猜想

原題目:

讓我們定義d​n​​為:d​n​​=p​n+1​​−p​n​​,其中p​i​​是第i個素數。顯然有d​1​​=1,且對於n>1有d​n​​是偶數。“素數對猜想”認為“存在無窮多對相鄰且差為2的素數”。

現給定任意正整數N(<10​5​​),請計算不超過N的滿足猜想的素數對的個數。

輸入格式:

輸入在一行給出正整數N

輸出格式:

在一行中輸出不超過N的滿足猜想的素數對的個數。

輸入樣例:

20

輸出樣例:

4

分析:

1.根據題目中所給素數對的猜想,即在題目要求的範圍內相差為2的相鄰素數有多少個。因此我的方法是從2開始向正整數N判斷,若當前值為素數,且加2後滿足小於等於N且為素數,則執行操作+1,最後列印結果。

程式碼:

 C語言版:

#include <stdio.h>
#include <stdlib.h>
//函式用於判斷是否為素數,
int isPrime(int n)
{
    int t=1,i=2;
    for(i=2;i<=sqrt(n);i++)
    {
        if(n%i==0)
        {
            return 0;
        }
    }
    return 1;

}

int main()
{
    //num 為讀入的數,flag為符合題目的個數,tag_1 tag_2分別是兩次判斷的標記
    int num,flag=0,tag_1=0,tag_2=0,i=0;
    scanf("%d",&num);
    for(i=2;i<num;i++)
    {
        tag_1=isPrime(i);//第一次判斷
        if(tag_1==1)//滿足條件則判斷+2後的值
        {
            if(i+2<=num)
            {
                tag_2=isPrime(i+2);//加2的值的判斷
                if(tag_2==1)//滿足條件
                {
                    flag++;//計數加一
                }
            }
            else
            {
                break;
            }
        }
    }
    printf("%d\n",flag);//列印結果
    return 0;
}