2025-03-04 学习记录--C/C++-C语言 判断是否是素数

合抱之木,生于毫末;九层之台,起于累土;千里之行,始于足下。💪🏻

C语言 判断是否是素数

一、代码 ⭐️

c 复制代码
#include <stdio.h>
#include <stdbool.h> // 使用 bool 类型

// 判断是否是素数的函数
bool isPrime(int num) {
    if (num <= 1) {
        return false; // 素数要大于1
    }
    if (num == 2) {
        return true; // 2 是素数
    }
    if (num % 2 == 0) {
        return false; // 偶数(除了 2)不是素数
    }

    // 检查从 3 到 sqrt(num) 的奇数
    for (int i = 3; i * i <= num; i += 2) {
        if (num % i == 0) {
            return false; // 如果能被整除,则不是素数
        }
    }
    return true; // 否则是素数
}

int main() {
    int num;

    // 输入一个整数
    printf("请输入一个整数: ");
    scanf("%d", &num);

    // 调用函数判断是否是素数
    if (isPrime(num)) {
        printf("%d 是素数。\n", num);
    } else {
        printf("%d 不是素数。\n", num);
    }

    return 0;
} 

二、部分代码分析 ⭐️

c 复制代码
for (int i = 3; i * i <= num; i += 2) {
     if (num % i == 0) {
         return false; // 如果能被整除,则不是素数
     }
}

因为质数是只能被 1和它本身 整除的数,如果num不是质数的话,那么它应该就可以表示成a*b=num。如果ab都大于num的平方根的话,那么a*b就会大于num。就和前面a*b=num矛盾了。所以说a或者b肯定有一个是小于或等于num的平方根。因此for循环那里i*i<=num,后面那个i+=2是为了保证每次检查的num都是奇数,因为偶数除了2以外,必然不是质数。

如果一个数能通过平方根得出一个整数值,那么这个数肯定不是质数。所以那里的条件应该是i<=根号num。但是有可能是无理数,就不好比较啦。就通过i*i<=num来实现。

相关推荐
不正经学生6 小时前
C语言预处理详解:编译器真正动手之前的那些事
c语言·开发语言·算法·面试·bug
门思科技6 小时前
LoRaWAN 设备类别:Class A、B、C 对比与选型指南
c语言·开发语言·php
M78佐菲9 小时前
Linux学习笔记:TCP协议
linux·笔记·学习·tcp/ip·算法
yi.Ist10 小时前
数据定义语言-DDL操作
数据库·学习·mysql·oracle·大海豚
xiaobobo333010 小时前
c语言中for循环条件中定义临时栈变量的作用域
c语言·for循环条件定义栈变量·大括号作用域·独立栈变量
惜离殇11 小时前
从零开始的敲代码生活--Linux应用软件(文件操作基础1)
linux·c语言·文件操作·标准io
潘潘的嵌入式日记13 小时前
I²C 从机接收总被覆盖?双缓冲要在 STOP 时交接
c语言·开发语言·单片机
骐骥114 小时前
学习:javaScriptProxy和registerJavaScriptProxy有什么区别,能注册多少个对象
学习·鸿蒙
Huathy-雨落江南,浮生若梦14 小时前
Caddy 学习笔记 - 反向代理与 IP 封禁
笔记·学习·tcp/ip
xx~t14 小时前
嵌入式——Linux软件编程——网络1
linux·c语言·网络·vscode·网络协议