C语言实现输出区间内全部素数

#include <stdio.h>
#include <stdlib.h>
#include <math.h>

int main()
{
    int i,j,m,n,flag,count=0;
    scanf("%d%d",&m,&n);//m和n是区间的两个端点值
    for(i=m,flag=0;i<=n;i++)
    {
        for(j=2,flag=0;j<=sqrt(i);j++)
        {
            if(i%j==0)
            {
                flag=1;
                count++;
                break;
            }
        }
        if(flag==0 && i>=2)
        {
            printf("%d ",i);
        }
    }
    if(count==0)
    {
        printf("该区间内没有素数");
    }
    return 0;
}

以上代码可以实现输出用户输入的区间内的全部素数,其中关键点为:

1.嵌套循环,外层循环用来遍历区间内的数,内层循环用来确认区间内具体某个数是否是素数。

2.素数大于1,且除了1和它本身以外没有别的因数。一般确认某数a是否为素数的方法是使a依次对比它小的数取余,若有余数为0则a可以被整除,a不是素数,若余数均不为0,则a不能被整除,a是素数。

3.sqrt(a)是根号a的意思。如果a对小于等于根号a的数取余均不为0,那么对于剩下的比a小的数,它们也不是a的因数。两个数相乘等于a,除非这两个数相等,不然a的一对因数一定是一个比根号a小,另一个比根号a大,如果比根号a小的数里没有a的因数,就可以确定剩下的数也没有a的因数。

比如,4*4=16,6*5=30,两个比根号a大的数的乘积一定比a大。

用这种方式判断a是否是素数,可以提升程序的运行效率。

4.标志变量,或称旗帜变量,这里用flag表示。flag初始值设为0,如果内层循环判断了一个数是素数,则将flag的值更改为1,内层循环结束后,在外层循环根据flag的值就可以确定一个数是否是素数、是否需要输出。

5.计数器,这里用count表示。

若想知道区间是不是没有素数,应该知道每一次内层循环的运行结果,flag的值一直得是0。然而flag的值变来变去显然不能满足要求,如果最后一次进入内层循环的数使flag的值为0,我们也不能判定flag的值一直是0,因此需要再引入一个变量count,如果flag的值有一次为1,则count++,这样就可以计算有几个数为素数,在外层循环再判断一下count是否为0,若为0说明一直没有素数,即可输出“该区间内没有素数”.

6.负数没有质数一说,但若输入区间内包含负数,根据以上运算规则就会将负数也输出,因此在外层循环根据flag的值输出素数时需要加一个条件,即此数>=2

小白的学习笔记,若有错误欢迎指正!

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值