c语言 输出[m,n]之间素数 的程序
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c语言 输出[m,n]之间素数 的程序相关的知识,希望对你有一定的参考价值。
最好是运行正确的
首先根据数学规则,编写判断素数的程序。
然后按照如下思路:
1 输入m和n;
2 对[m,n]的整数进行遍历。
3 对每个数值进行判断,如果是素数,则输出。
代码:
#include <stdio.h>#include <math.h>
int is_prime(int n)
int i;
for(i = 2; i <= sqrt(n); i ++)
if(n%i == 0) return 0;
return 1;
int main()
int m,n,i;
scanf("%d%d",&m,&n);
for(i = m; i <= n; i ++)
if(is_prime(i))printf("%d ", i);
参考技术A (先建立一个含有2~up之间所有自然数的数表,在数表中删去2的倍数(不包括2);然后找2后面第一个被保留的数p(是3),再删除p的倍数(不包括p);然后再找下一个被保留的数(是5),继续上述步骤:这样继续下去,直至P大于sqrt(up)为止。最后再删除小于low的数,这样数表中剩下的数就是所要求的所有素数(low~up之间)。
1) #include <stdio.h>
#include <stdlib.h>
#include<math.h>
#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->key<sqrt(up);p=p->next)
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<low)/*把小于low的多余的数删除*/
free(shai);
shai=shai1;
shai1=shai1->next;
while(shai!=NULL)
printf("%d ",shai->key);
shai=shai->next;
system("PAUSE");
return 0;
参考技术B #include <stdio.h>
#include <math.h>
int f(int n)//判断n是否为素数,是则返回1,否则返回0
int i=2;
while(i<=sqrt(n))
if (n%i++==0)return 0;
return 1;
void main()
int m,n;
printf("请输入m n :");
scanf("%d %d",&m,&n);
while(m<=n)
if (f(m))printf("%-3d",m);
m++;
本回答被提问者采纳 参考技术C main() int floy,m; for(m=2;m<=100;m++) /*这句是设定求2到100的素数 数字可以按你需要的改*/ f(m);/*函数调用*/ f(int x) int floy=1,i; for(i=2;i<=x-1;i++) if(x%i==0) floy=0;break; if(floy==1) printf("%d",x); /*这是求100以内的素数具体要求M到N的改一下前面的那句就可以了*/ 参考技术D 我就只回答[1,100]的了,其他的改一下数字即可!
#include "stdio.h"
#include "conio.h"
main()
int m,i;
for(m=2;m<=100;m++)
for(i=2;i<=m-1;i++)
if(m%i==0) break;
if(i>m-1) printf("%3d",m);
getch();
ZZNUOJ_C语言1092:素数表(函数专题)(完整代码)
题目描述
输入两个正整数m和n,输出m和n之间的所有素数。
要求程序定义一个prime()函数和一个main()函数,prime()函数判断一个整数n是否是素数,其余功能在main()函数中实现。
int prime(int n) //判断n是否为素数, 若n为素数,本函数返回1,否则返回0
输入
输入两个正整数m和n,m<=n,且都在int范围内。
输出
输出占一行。输出m和n之间的所有素数,每个数后有一个空格。如果如果m到n之间没有素数,输出”No Answer”。
样例输入
2 6
以上是关于c语言 输出[m,n]之间素数 的程序的主要内容,如果未能解决你的问题,请参考以下文章