#includetypedef struct Node{
int data;
struct Node *link;
}LinkList;
void buildList(int max,LinkList *&head){//构建链表函数
LinkList *l,*p;
int i;
head=(LinkList*)malloc(sizeof(LinkList));
head->link=NULL;
l=head;
for(i=2;i<=max;i++){
p=(LinkList*)malloc(sizeof(LinkList));
l->link=p;
p->data=i;
p->link=NULL;
l=p;}}
void eratosthenes(int max,LinkList *&head){//使用埃拉托色尼筛法 筛选数字
LinkList *a,*b;
a=head->link;
for(;;){
if(a->data<=sqrt(max)){
b=a;
while(b&&b->link){
if(b->link->data%a->data==0)
{
b->link=b->link->link;}
b=b->link;}
a=a->link;}
else break;}
}
void printList(LinkList *head){//输出链表 函数
LinkList *q;
int k=0;
q=head->link;
printf("范围内的素数有:");
for(;;)
{if(q==NULL)break;
else{
printf(" %d ",q->data);k++;
q=q->link;}
}
printf("\n 共有素数:%d 个",k);
printf("\n");
}
int main(){//主函数
LinkList *head;
int max;
printf("使用埃拉托色尼筛法求素数\n");
printf("请输入要求素数的范围max=");
scanf("%d",&max);//构建链表
buildList(max,head);// 使用埃拉托色尼筛法 筛选数字
eratosthenes(max,head);//输出链表
printList(head);
}}