C语言-5月11日 如何判断一个数为素数,并遍历出一个区间内的所有素数

#include<stdio.h>
int main()
{
    int i = 0;
    int num = 0;
    printf("请您输入一个正整数:\n");
    scanf("%d",&num);//输入num的值
        for(i = 2;i < num; i++){//从i = 2开始循环取余
            if(num % i == 0){
                printf("您输入的这个数不是素数。\n");
                break;//一旦满足num取余i,跳出循环
            }
        }
        if(num == i){
            printf("您输入的这个数是素数。\n");
        }
    return 0;
}

如图,我输入数字7:

输出完成

如图,我输入数字20:

扩展:在判断一个数是否为素数的前提下,我们如何判断一个范围内的所有素数,并将这个区间段内所有的素数输出,然后同时输出这个区间段内素数的个数呢? 

#include<stdio.h>
int main()
{
    int i = 0;
    int j = 0;
    int num = 0;
    for(num = 1;num < 200;num++){//定义遍历的范围
        for(i = 2;i < num; i++){//从i = 2开始循环取余
            if(num % i == 0){
                break;//一旦满足num取余i,跳出循环
            }
        }
        if(num == i){
            printf("%d ",num);//条件满足时,将素数输出
            j++;//每次满足条件时,j的个数加一
        }
    }
    printf("\n素数的个数为:%d\n",j);//将素数的个数输出
    return 0;
}

如图,为运行结果:

​​​​​​​

输出完成

更改遍历范围,将1~1000之间的素数全部输出:

输出完成

  我们观察上面的代码,可以知道,遍历的范围是在写代码时就已经固定好了的,如果要更改区间段唯一的方法就是修改源代码中num的范围,并且我们无法得出输出所有素数的求和,那么我们如何能让用户决定素数输出的区间,并且可以得出用户输入任何区间段都能将这个区间段里面的所有素数的和求出来且表示出来呢?代码更改如下:

#include<stdio.h>
int main()
{
    int i = 0;
    int j = 0;
    int num = 0;
    int a = 0;//第一个区间值
    int b = 0;//第二个区间值
    int sum = 0;
    int temp;//定义交换中间值
    printf("请输入输出素数的区间:\n");
    scanf("%d%d",&a,&b);//输入区间段的值
    if(a>b){//交换算法,区间值应该是小数在前,大数在后,如果出现用户先将大数输入后输入小数,将两数调换位置,符合区间规则
            temp = a;
            a = b;
            b = temp;
        }
    for(num = a;num < b;num++){//从输入的区间值开始遍历
        for(i = 2;i < num; i++){//从i = 2开始循环取余
            if(num % i == 0){
                break;//一旦满足num取余i,跳出循环
            }
        }
        if(num == i){
            printf("%d ",num);//条件满足时,将素数输出
            j++;//每次满足条件时,j的个数加一
            sum += num;//满足条件时,将每一次输出的素数进行累加,赋值给sum
        }
    }
    printf("\n素数的个数为:%d\n",j);//将素数的个数输出
    printf("这个区间段内所有素数的和为:%d\n",sum);//将这个区间段内的所有素数和输出
    return 0;
}

如图,我输入的区间段为1~100:

输出完成

如图我输入中间区间100~1000:

输出完成 

 那么如何将这个功能写进函数里面,在主函数里面随时调用呢?

#include<stdio.h>
int judge(int n)//判断是否为素数的函数
{
    int i = 0;
    int j = 0;
    for(i = 2;i < n;i++){
        if(n % i == 0){//满足取余等于零
            j++;//非素数的个数加一
            return 1;//返回值为1
        }
    }
    if(j == 0 && n!=1){//当非素数的个数为零,且函数形参的值不为1;
        return 2;//返回值为2;
    }
}
int main()
{
    int num = 0;
    int sum = 0;
    for(num = 1;num < 200;num++){//定义遍历范围
        if((judge(num) == 2)){
            sum = sum + num;
            printf("%d  ",num);//打印返回值为2的条件(素数条件)的所有数据
            printf("%d\n",sum);//打印返回值为2的条件(素数条件)的所有数据的所有和
        }
    }
    return 0;
}

如图为运行结果:

可以看出,遍历的范围为1~200,调用judge函数将这个区间段内的所有的素数输出,并且每一次输出素数的时候都进行一次累加,最终的4227就是这个区间段内所有素数的总和。

观察上述代码可以发现,函数共有两个返回值,返回值为1时代表的是非素数的情况,返回值为2则代表的是素数的情况,那么我们试试更改主函数中的返回值为1:

我将此时if条件判断语句中的语句更改为了:if((judge(num) == 1)),现在运行试试看: 

从运行结果中不难看出,更改返回值,现在输出的是1~200区间段内所有的非素数及非素数的和。

综上,我们要想让程序表达出不同的结果,只需要在写的函数功能中定义每种情况的返回值,在主程序中调用函数时,使用if条件判断句切换任意返回值即可使程序体现不同的功能。 

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Ritchie_Zeng

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值