【C語言版】1007 素數對猜想 (20分)

                                  1007 素數對猜想 (20分)

讓我們定義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

第一個代碼是借鑑別人的。

 

第二個是我寫的,但是隻有18分。

#include <stdio.h>
int isprime(int a); 
int main() 
{
    int N, cnt = 0;
    scanf("%d",&N);//輸入
    
    for (int i = 5; i <= N; i++)
        if (isprime(i-2) && isprime(i)) cnt++;
    
    printf("%d",cnt);
    return 0;
}

int isprime(int a)
{
    for (int i = 2; i * i <= a; i++)
        if (a % i == 0) return 0;
    return 1;
}


/*#include<stdio.h>
int temp[100000]={0};
int main()
{
    int N;
    int i,j,prime[100]={0},d[100]={0},flag=0;
    int count=0;
    scanf("%d",&N);
    for(i=2;i<=N;i++)
        {
        	for(j=2;j<=i;j++)
        		{
        			if(i%j==0) break;//能夠被整除的就不是素數 
				}
        	if(j==i) temp[i]=i;
        }
        
    j=1;
    for(i=0;i<=N;i++)//將素數保存到prime[] 裏面
    {
    	if(temp[i]!=0) 
			{
				prime[j]=temp[i];
				j++;//素數個數 
			}
	}
	
	for(i=2;i<j;i++)//素數對的個數統計
		{
			d[i]=prime[i+1]-prime[i];
			if(d[i]%2==0 && d[i]==2) count++;
		}
		 
	printf("%d",count);

    return 0;
}
*/

 

 

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