问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

C语言 输出n到m之间的所有素数

发布网友 发布时间:2022-07-24 08:56

我来回答

5个回答

热心网友 时间:2023-10-08 23:18

对n到m之间所有数进行遍历,逐一判断是否为素数,如果是则输出。

一、算法设计:

1、输入n和m;

2、判断n和m关系,如n>m则交换;

3、遍历n到m所有值,对于每个值判断是否为素数,如是则输出;

二、参考代码:

#include <stdio.h>
#include <math.h>
int isPrime(int n)//判断素数函数。
{
    int i;
    for(i = 2; i <= (int)sqrt(n); i ++)//从2到算数平方根遍历。
        if(n%i == 0) return 0;//存在约数,非素数,返回0.
    return 1;//是素数,返回1.
}
int main()
{
    int n,m,i;
    scanf("%d%d",&n,&m);//输入。
    if(n>m)//如果n值较大,则交换n和m值。
    {
        i=n;
        n=m;
        m=i;
    }
    for(i = n; i <= m; i ++)//遍历。
        if(isPrime(i))//是素数。
            printf("%d ", i);//输出素数。
    return 0;
}

热心网友 时间:2023-10-08 23:19

你好!!

给你一个简单点的,你看看吧 

#include <stdio.h>
void main()
{
    int a, b, count=0;
    int i;
    int j;
    printf("输入两个整数,输出这两个数之间素数:\n");  
    scanf("%d%d",&a,&b);

    for(i=a; i<=b; i++)
    {
        for(j=2; j<=i; j++)
        {
            if(i==j)
            {
                if(count == 10)
                {
                    printf("\n");
                    count=0;
                }
                count++;
                printf("%5d",i);
            }
            if(i%j==0)
                break;
        }
    }
}

热心网友 时间:2023-10-08 23:19

(先建立一个含有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 *shai,int up)/*筛选算法*/
{
keytype *p,*r,*q;
p=shai->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 shai; /*返回筛选结果*/
}

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;
}

热心网友 时间:2023-10-08 23:20

关于回车问题,1楼已解释清楚。
可是你又没有发现 当输入 3 100 是 输出是从11开始的素数。 5和7并未输出。

另外 简化程序。 应将k=sqrt(m);删除。在a=1;的前面加上 k=sqrt(j);
附上程序:
#include <stdio.h>
#include <math.h>
void main(void)
{ int i,j,m,n,k,s,a,b=0;
scanf("%d",&n);
scanf("%d",&m);
for(j=n;j<m;j++)
{
k=sqrt(j); //程序改进 在此行
a=1;
for(i=2;i<=k;i++)
if(j%i==0)
{a=0;break;}
if(a==1)
{printf("%5d",j);b++;
if(b%10==0) printf("\n");} //回车问题在此行
}
}

热心网友 时间:2023-10-08 23:21

行与行之间不止一个回车,有的很多有的几个,这是因为你最后一句:

if(b%10==0) printf("\n");

没有包含在if(a==1)中。这样当a==0时,也会判断if(b%10==0),造成输出很多个回车。改成:

if(a==1)

{
printf("%5d",j);b++;
if(b%10==0) printf("\n");
}
应该就可以了。(注意大括号位置)

至于判断素数的简化算法,如果你是指代码可读性,那么你这种算法已经比较直观了。如果你是指代码的运行效率及运算速度,那么,你可以参考一下这个网址,里面对素数的判断有比较详细的分析:http://www.cnblogs.com/luluping/archive/2010/03/03/1677552.html
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
王奇 这个名字好不好 城建税等计入什么科目 灭火器多久保养一次 灭火器保养周期是多久? 朋友在北京想开一家超市的,请问什么地方适合?还有前期要准备什么? 恐龙宝宝漫游记之我爱我家2内容提要 我爱我家艳红为什么离婚 Faudel演唱的法语歌曲mon pays 的中文歌词,哈哈哈哈,谁有 Shy'm的Le blues de toi 歌词意思 ...那个t后面省略了什么 还有,希望能帮我翻译一下以下的歌词_百度... 地下城堡2小米版安卓APK如何下载 输入2 个正整数m和n(1&lt;=m,n&lt;=500),统计并输出m 和n之间的素数的个数以及这些素数的和。 输入2个正整数m和n(m&gt;=1,n&lt;=500),统计并输出m和n之间的素数个数以及这些素数的和。 新龙族战斗技能书获得途径? 新龙族新在哪里? 新龙族多少级可以组队 新龙族怎么升级快 新龙族玩法 关于新龙族的基本工作问题 新龙族和龙族是一样的吗 新龙族边境杀多少人才有声望 画数轴的步骤是什么,有那些要素,如何确? 小学数学是如何利用直线上的点表示正数和零 六年级在直线上表示数数轴上还有下面没有标数还标吗 在用直线上的点表示数时,应先确定好( )的位置,并要规定哪个方向是正方... 在直线上表示数时一般先确定什么再确定什么最后确定什么? ab胶水能粘pvc水管接头吗? pvc管ab胶可以粘得牢吗 一台PSP的使用寿命是多久? PSP一般能用多长时间? PSP的使用寿命大概有多久?用PSP合算吗?PSP看小说效果好吗?如题 谢谢了 c语言问题 求从n到m的所有素数 求m与n之间素数个数 如何写一个求n-m之间的全部素数的程序 c语言习题 求n到m之间所有的素数及其总数 C语言 求n到m之间所有的素数 不要着急,不要着急,休息,休息一会儿&quot;是哪个日本动画片人物的台词_百度... 世上本无事,何必惹尘埃。下句怎么回答 混凝土回弹值 社会保险及住房公积金 酸奶蛋糕口感发涩 身份证号上是422123是哪个省县市 身份证的前6位422123代表什么意思,是哪个省市区县的代码? 422123是哪个地区的身份证编码开头 为啥湖北红安县居民身份证三四位数有人不一样? 湖北省黄冈市的编号 420123开头的身份证是哪里的人 293影视终身会员靠谱吗 293影视密码忘了怎么办 293影院怎么那么卡 C语言代码问题:求解