1007 素數對猜想 (20分)
讓我們定義dn爲:dn=pn+1−pn,其中pi是第i個素數。顯然有d1=1,且對於n>1有dn是偶數。“素數對猜想”認爲“存在無窮多對相鄰且差爲2的素數”。
現給定任意正整數N
(<105),請計算不超過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;
}
*/