6个回答
展开全部
首先根据数学规则,编写判断素数的程序。
然后按照如下思路:
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);
}
展开全部
(先建立一个含有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;
}
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;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
#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++;
}
}
#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++;
}
}
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
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的改一下前面的那句就可以了*/
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
我就只回答[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();
}
#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();
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询