#include<stdio.h>
#include<stdlib.h>
#include<math.h>
int isprime(int N);
typedef struct prime* Dprime;
void attach(int,Dprime*);
struct prime
{
int data;
Dprime link;
};
int main()
{
int i,N,cnt=0;
scanf("%d",&N);
Dprime Rear,t;
Dprime base=(Dprime)malloc(sizeof(struct prime));
base->link=NULL;
Rear=base;
for(i=2;i<N+1;i++)
{
if(isprime(i))
{
attach(i,&Rear);
}
}
t=base;
base=base->link;
free(t);
Rear=base;
while(Rear->link!=NULL)
{
if((Rear->link->data - Rear->data)==2)
{
cnt++;
}
Rear=Rear->link;
}
printf("%d",cnt);
return 0;
}
int isprime(int N)
{
int i,flag=0;
for(i=2;i<sqrt(N)+1;i++)
{
if(N%i==0&&N/i!=1)
{
flag=1;
}
if(flag==1)
{
break;
}
}
if(flag==1)
{
return 0;
}
else
{
return 1;
}
}
void attach(int i,Dprime* Rear)
{
Dprime P=(Dprime)malloc(sizeof(struct prime));
P->link=NULL;
P->data=i;
(*Rear)->link=P;
(*Rear)=P;
}
起初没有接触到数据结构的时候用数组做的很艰辛,后来发现用链表解决好像更轻松,Debug了好久,最后发现是指针定义出现了错误,静态分配的指针变量在栈区没有进行初始化,不能对其进行相应操作,在堆区动态分配空间后才能进行链的串接和赋值