键入一个整数,判断是否是质数(两种方法)

判质数的原理就不过多赘述了,请移步C语言求100到500的所有质数,每10个数字一行打印_马拾捌的博客-CSDN博客_c语言每十个一行质数就是只能被1和他自己整除的数字第一次代码优化一个数字的因数里,除了1和自己以外最大的因数一定小于等于自身的一半,换句话讲,一个数字不可能被大于自身一半的数字整除如36的因数,1和自身除外218312496694123182第二次代码优化有了上一次的优化后我们可以尝试列出几个数字的所有因数,例如上图的36(建议用平方根为整数的数字)。不难发现,平方根之后的因数9,12,18所对应的4,3,2重复出现了两次,所以说除重复的因数外,一个数的最大的因数小于等于该数的平方根。...https://blog.csdn.net/mzy5987/article/details/126476764?spm=1001.2014.3001.5501

  • 方法一

此方法的核心就在于for循环是如何结束的,其一:不符合循环判断条件,循环结束;其二:在循环体中break提前结束循环。

#include <stdio.h>
#include <math.h>
int main()
{
    //定义一个变量用来接收用户输入的数据
	int num;
    //打印提示语(可有可无)
	printf("请输入一个大于等于2的正整数: "); 
    //获取用户输入
	scanf("%d", &num);
    //首先判断键入的数字是否大于2
    if(num >= 2){
        int i;
        //通过for循环求出2到该数字平方根的所有数字
        for(i = 2; i <= sqrt(num); i++){
            //判断:num是否可以被当次循环的数字整除         
            if(num % i == 0){
                //如果if的判断条件为假,执行for循环的表达式“i++”
                //一旦进入判断,说明i是num的因数
                //break提前结束循环
                break;
            }
        }//根据for循环的执行顺序:表达式1->表达式2->循环体->表达式3
	    //循环体中if语句的判断结果若始终为假,将再次返回到表达式3
	    //执行for循环的表达式“i++”后,for循环的判断条件为假,循环结束
	    //判断:i是否大于数字num的平方根
        if(i > sqrt(num)){
            //条件成立:是质数并格式化打印语句
            printf("%d 是质数\n", num);
        //否则:不是质数并格式化打印语句
        }else{            
            printf("%d 不是质数\n", num); 
            }
    //键入的数字小于2,打印“ERROR!”
    }else{
        printf("ERROR!");
    }
}

代码运行结果:

 

  

  • 方法二

此方法中用到一个变量flag去记录是否为质数的状态,默认为1(是质数),经过外层for循环和内层的判断,最终得到flag。最后判断flag的值,为1,是质数;为0,则不是质数。

#include <stdio.h>
#include <math.h>
int main()
{
    //定义一个变量用来接收用户输入的数据
    int num;
    //定义一个变量记录状态(是否为质数),默认是质数
    int flag = 1;
    //打印提示语句(可有可无)
    printf("请输入一个大于等于2的正整数:");
    //获取用户输入
    scanf("%d", &num);
    //判断用户输入的数字是否大于等于2
    if(num >= 2){
        //使用for循环求出2到该数字的平方根的所有数字
        for(int i = 2; i <= sqrt(num); i++){
            //判断该数字是否能被当次循环的i整除
            if(num % i == 0){
                //如果未能整除,则继续执行for循环
                //如果整除,说明该数不是质数,状态更新为0
                flag = 0;
                //使用break提前结束循环
                break;
            }
        }
        //判断flag是否为1,是1就是质数
        //if的判断条件的值无非就是真与假,所以这里只写一个flag就够了
        if(flag)
            //格式化打印出是质数
            printf("%d 是质数\n", num);
        else
            //否则,该数字就不是质数,格式化打印出不是质数
            printf("%d 不是质数\n", num);
    //否则打印ERROR
    }else{
        printf("ERROR\n");
    }
}

代码运行结果:

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值