1007 素数对猜想 (20分)(链表实现)

在这里插入图片描述

#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了好久,最后发现是指针定义出现了错误,静态分配的指针变量在栈区没有进行初始化,不能对其进行相应操作,在堆区动态分配空间后才能进行链的串接和赋值

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值