新手专科准大一学习c语言的第12天之判断一个数是否为素数的函数以及函数的优化学习

代码

此代码是用来查找并打印出100到200之间所有素数的实现。代码的逻辑清晰且有效。

#include <stdio.h>

int main()
{
    // 素数的条件为只能被1或者它本身整除的
    for (int i = 100; i <= 200; i++)
    {
        int j = 0;                   // 定义一个整形变量初始值为0来判断i除了它本身能整除之外还有没有其它数可以整除它的
        int flag = 1;                // 默认当前i是素数
        for (j = 2; j <= i - 1; j++) // 初始值设定为2为了循环判断设置它的条件为i-1
        {
            if (i % j == 0) // 如果它能被当前非本身的数整除那就说明它不是素数
            {
                flag = 0; // 设置flag的值标记它不是素数
                break;    // 此时应该跳出循环 因为已经出现了除了1和它本身可以整除它的数
            }
        }
        if (flag == 1) // 进行素数的打印
        {
            printf("%d数是素数\n", i);
        }
    }
    return 0;
}

说明

  • 外层循环 (for (int i = 100; i <= 200; i++)):

    • 这个循环遍历从100到200之间的每个整数 i,用来判断这些数是否是素数。
  • 内层循环 (for (j = 2; j <= i - 1; j++)):

    • 这个循环用于判断当前的 i 是否可以被2到 i-1 之间的任意数整除。
    • 如果在此范围内找到可以整除 i 的数,i 就不是素数。
  • 标志变量 flag:

    • 初始值为1,假设 i 是素数。
    • 如果在内层循环中发现 i 能被 j 整除,flag 会被设置为0,并且退出内层循环。
    • 如果 flag 仍然为1,则表示 i 是素数。

优化 

但是以上的方法并不高效所以需要改动一下代码

sqrt函数

函数说明

sqrt 是 C 标准库中提供的一个数学函数,用于计算一个数的平方根。它属于 math.h 头文件,需要在代码中包含这个头文件才能使用。

应用sqrt优化

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

int main()
{
    // 素数的条件为只能被1或者它本身整除的
    for (int i = 100; i <= 200; i++)
    {
        int j = 0;                     // 定义一个整形变量初始值为0来判断i除了它本身能整除之外还有没有其它数可以整除它的
        int flag = 1;                  // 默认当前i是素数
        for (j = 2; j <= sqrt(i); j++) // 优化后就可以直接从2开始遍历到开平方i之间这些数字能不能整除i
        {
            if (i % j == 0) // 如果它能被当前非本身的数整除那就说明它不是素数
            {
                flag = 0; // 设置flag的值标记它不是素数
                break;    // 此时应该跳出循环 因为已经出现了除了1和它本身可以整除它的数
            }
        }
        if (flag == 1) // 进行素数的打印
        {
            printf("%d数是素数\n", i);
        }
    }
    return 0;
}

代码的改进

  1. 使用 sqrt(i):
    • 使用 sqrt(i) 减少了内层循环的次数,提高了代码执行效率。
  2. 打印结果更简洁:
    • 修改了打印输出,确保输出格式与上下文一致。

这个版本的代码功能与原版相同,但运行效率更高,适合查找大范围内的素数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值