Leecode刷题C语言之统计不是特殊数字的数字数量

执行结果:通过

执行用时和内存消耗如下:

复制代码
bool isPrime(int n){
    if(n<2){
        return false;
    }
    for(int i=2;i*i<=n;i++){
        if(n%i==0){
            return false;
        }
    }
    return true;
}
int nonSpecialCount(int l, int r) {
    int p=sqrt(l);
    int q = sqrt(r);
    int len = r-l+1;
    for(int i = p; i <=q; i++) {
        if(isPrime(i)&&i*i>=l) {
            len--;
        }
    }
    return len;
}

解题思路:

这段代码主要包含两个函数:isPrimenonSpecialCount。下面分别解释这两个函数的思路。

isPrime 函数

这个函数用于判断一个整数 n 是否为质数。

  1. 判断边界条件
    • 如果 n 小于 2,直接返回 false,因为质数定义为在大于 1 的自然数中,除了 1 和它本身以外不再有其他因数的数。
  2. 检查因数
    • 从 2 开始,一直到 sqrt(n)(即 n 的平方根),逐个检查是否存在能够整除 n 的数。
    • 如果在这个范围内找到了一个数 i,使得 n % i == 0,说明 n 不是质数,返回 false
    • 如果循环结束都没有找到这样的 i,说明 n 是质数,返回 true

注意 :只需要检查到 sqrt(n) 是因为如果一个数 n 不是质数,那么它必有一个因子不大于它的平方根。

nonSpecialCount 函数

这个函数用于计算在区间 [l, r] 内,有多少个整数不是某个质数的平方。

  1. 计算区间长度
    • 首先计算区间 [l, r] 的长度 len,即 r - l + 1
  2. 确定质数平方的范围
    • 计算 lr 的平方根,分别为 pq
    • 只需要考虑 [p, q] 范围内的质数,因为在这个范围外的质数的平方要么小于 l,要么大于 r,不在考虑范围内。
  3. 检查质数平方
    • 遍历 [p, q] 范围内的每个整数 i,使用 isPrime 函数判断 i 是否为质数。
    • 如果 i 是质数且 i * i 在区间 [l, r] 内,说明这个质数的平方在区间内,因此 len 需要减一。
  4. 返回结果
    • 最后返回调整后的 len,即区间 [l, r] 内不是某个质数平方的整数个数。

注意 :这里的"特殊"指的是某个质数的平方,而函数名 nonSpecialCount 意味着计算"非特殊"的数量,即不是质数平方的数量。

相关推荐
辰烨chenye10 小时前
LeetCode Hot 100 题解 · 普通数组篇
算法·leetcode·职场和发展
lhldsg13 小时前
全民健身解决方案小程序开发:从0到1的技术实战
java·数据库·需求分析
jason成都13 小时前
Spring WebFlux 适配达梦新方案|dm‑r2dbc:Netty 异步传输的实验性 R2DBC 驱动
java·后端·spring
泡海椒13 小时前
内置SPI函数库详解:JQuick-Java Builtin工具类实战用法
java·开发语言·python
hqyjzsb13 小时前
零 AI 项目经验,学 Python 转型 AI 的正确顺序是什么?
开发语言·人工智能·python·算法·职场和发展·数据挖掘·数据分析
辰烨chenye13 小时前
LeetCode Hot 100 题解 · 二分篇
java·算法·leetcode
微功夫信息技术13 小时前
分层多智能体强化学习驱动的非急救转运公平 - 效率统一调度系统研究与实践
人工智能·学习·算法·动态规划
T1mzhou13 小时前
ARM64 Linux 6.10内核启动流程7-ioremap和readl writel
linux·服务器·c语言
小羊没烦恼!14 小时前
Hello Web API系列教程——Web API与国际化
java·服务器·前端·javascript·php
sanjiaomao33314 小时前
从论文公式到Python实现:用单元测试校验滑动平均算法
python·算法·单元测试