c语言输出m和n之间的字符串,C语言 输出n到m之间的所有素数

(先建立一个含有2~up之间所有自然数的数表,在数表中删去2的倍数(不包括2);然后找2后面第一个被保留的数p(是3),再删除p的倍数(不包括p);然后再找下一个被保留的数(是5),继续上述步骤:这样继续下去,直至P大于sqrt(up)为止。最后再删除小于low的数,这样数表中剩下的数就是所要求的所有素数(low~up之间)。

1) #include

#include

#include

#define max 10000

keytype * init(keytype *sushu)/*初始化结点*/

{

sushu=(keytype *)malloc(sizeof(keytype));

sushu->next=NULL;

return sushu;

}

keytype *creatlist(keytype *shai,int low,int up)/*建立从2开始到up的整数的链表*/

{

keytype *p,*r;

int i,_up;

shai=init(shai);

r=shai;

for(i=low;i<=up;i++)

{

p=init(p);

p->key=i;

r->next=p;

r=r->next;

}

return shai;

}

keytype *shaixuan(keytype *shaizhi,int up)/*筛选算法*/

{

keytype *p,*r,*q;

p=shaizhi->next;

for(;p->keynext)

{r=p;

while(r->next!=NULL)

{

if(r->next->key%p->key==0) /*如果r->next->key 能被p->key整除,则r->next->key不是素数,释放r->next*/

{

q=r->next;

r->next=q->next;

free(q);

}

else r=r->next;

}

}

return shaizhi; /*返回筛选结果*/

}

int main(int argc, char *argv[])

{int up=0,_up,low=0;

keytype *shai,*shai1;

printf("输入上限和下限\n");

scanf("%d%d",&low.&up);

shai=creatlist(shai,2,up);//建立数组从2—up

up=sqrt(up);

shai=shaixuan(shai,up);//筛选2—up中的素数

shai1=shai->next;

free(shai);

shai=shai1;

shai1=shai1->next;

while(shai->key

{

free(shai);

shai=shai1;

shai1=shai1->next;

}

while(shai!=NULL)

{ printf("%d ",shai->key);

shai=shai->next;}

system("PAUSE");

return 0;

}

温馨提示:答案为网友推荐,仅供参考

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值