当前位置: 首页 > news >正文

题解:洛谷 B4553 [GESP202606 二级] 完全平方数计数

【题目来源】

洛谷:B4553 [GESP202606 二级] 完全平方数计数 - 洛谷

【题目描述】

小杨同学正在研究完全平方数。

平方:一个数的平方等于这个数乘以这个数本身。

完全平方数:指可以恰好表示为某个正整数的平方的数。

例如,9 99是完全平方数,因为9 = 3 2 = 3 × 3 9 = 3^2 = 3 \times 39=32=3×3;但27 2727不是,因为27 2727不能表示为任何正整数的平方。

给定两个正整数l llr rr(保证l ≤ r l \le rlr),小杨同学想知道l llr rr之间的所有正整数中(包含l llr rr),有多少个数是完全平方数。

【输入】

输入两行,第一行为一个正整数l ll,第二行为一个正整数r rr

【输出】

输出一个非负整数,表示l llr rr中,有多少个正整数是完全平方数。如果l llr rr中没有完全平方数,则输出0 00

【输入样例】

1 21

【输出样例】

4

【核心思想】

  1. 问题分析:给定区间[ l , r ] [l, r][l,r],需要统计其中完全平方数的个数。完全平方数是指可以表示为某个正整数k kk的平方的数,即x = k 2 x = k^2x=k2。问题等价于求满足l ≤ k 2 ≤ r l \leq k^2 \leq rlk2r的正整数k kk的个数。

  2. 算法选择

    • 直接枚举:遍历区间[ l , r ] [l, r][l,r]中的每个整数,利用平方根函数判断是否为完全平方数
    • 数学判定:对于整数x xx,若⌊ x ⌋ 2 = x \lfloor \sqrt{x} \rfloor^2 = xx2=x,则x xx为完全平方数
  3. 关键步骤

    • 读入区间l ll(左端点)、r rr(右端点)
    • 遍历判定:对i iil llr rr
      • 计算t = ⌊ i ⌋ t = \lfloor \sqrt{i} \rfloort=i(对i ii取平方根后向下取整)
      • t × t = i t \times t = it×t=i,则i ii为完全平方数,ans++
    • 输出答案a n s ansans
  4. 时间/空间复杂度

    • 时间复杂度:O ( r − l + 1 ) O(r - l + 1)O(rl+1),遍历区间内每个整数并执行常数时间的平方根运算
    • 空间复杂度:O ( 1 ) O(1)O(1),仅使用常数个变量
  5. 完全平方数判定的核心思想

    • 平方根还原法:利用x \sqrt{x}x的整数部分t tt,通过验证t 2 t^2t2是否等于x xx来判定完全平方数,避免了枚举所有可能的因数
    • 浮点精度处理int(sqrt(x))将浮点结果截断为整数,再平方比较,利用了完全平方数的平方根必为整数这一性质
    • 区间计数转化:将"区间内完全平方数个数"转化为"区间内满足k 2 k^2k2形式的整数个数",若区间范围较小可直接枚举,若范围较大可优化为计算⌊ r ⌋ − ⌈ l ⌉ + 1 \lfloor \sqrt{r} \rfloor - \lceil \sqrt{l} \rceil + 1rl+1
    • 适用于整数性质判定、区间统计类基础数学问题

【算法标签】

#入门 #模拟

【代码详解】

#include<bits/stdc++.h>usingnamespacestd;intl,r,ans;// l: 区间左端点; r: 区间右端点; ans: 区间内完全平方数的个数boolcheck(intx)// 判断 x 是否为完全平方数{if(int(sqrt(x))*int(sqrt(x))==x)// 将 sqrt(x) 取整后平方,若等于 x 则为完全平方数{returntrue;// x 是完全平方数}returnfalse;// x 不是完全平方数}intmain(){cin>>l>>r;// 读入区间左右端点for(inti=l;i<=r;i++)// 遍历区间 [l, r] 中的每个整数if(check(i))// 如果当前数是完全平方数{ans++;// 计数器加一}cout<<ans<<endl;// 输出区间内完全平方数的总数return0;}

【运行结果】

1 21 4
http://www.jsqmd.com/news/1125109/

相关文章:

  • reverse和substr用法
  • 手机内存不足怎么清理不删文件?免费方案+靠谱工具推荐|避坑指南
  • 鸿蒙应用安全认证实战:基于HUKS密钥库的签名验签方案详解
  • VRRTest:3步检测你的显示器可变刷新率是否真正工作
  • FModel:Unreal Engine游戏档案浏览器完整指南
  • ng系列.
  • 【OpenHarmony/HarmonyOs 】科学计算器实现细节:本地表达式解析、历史记录与零网络依赖
  • WebAssembly 跨语言数据格式:JSON 方便,但不一定便宜
  • AI机器学习高级数学与优化
  • 豆包AI vs DeepSeek:生活可用性与技术能力的范式之辨
  • AI写教材必备攻略!掌握这些技巧,低查重生成高质量教材不是梦
  • SQL注入从原理到实战:手工注入、绕过技巧与安全防御详解
  • LangGraph add_conditional_edges 完整详解
  • 实战指南:快速掌握ForgeGradle的完整构建流程
  • 豆包、千问下线智能体:不是 Agent 凉了,是野蛮生长期结束了
  • DeepBump三分钟上手教程:从平面图片到三维纹理的魔法转换
  • 镜像视界纯视觉无感定位视频孪生底层技术全解
  • STM32F405RG驱动WS2812 LED的嵌入式开发实践
  • DyberPet:重新定义桌面交互的虚拟伙伴开发框架
  • 配置文件的工程化管理:从环境变量到结构化配置的演化路径
  • 网络安全渗透测试入门:从DVWA到在线靶场的实战训练指南
  • AI 电动窗帘电机智能功率 高可靠及 IoT 智能联动 核心选型方案
  • DockDoor终极指南:重新定义macOS窗口管理与效率革命
  • League-Toolkit:英雄联盟智能游戏助手的革命性突破
  • 探索 Aqua,Hyperliquid 如何打通衍生品流动性向零售渗透的最终圣杯
  • UI自动化测试中span元素定位的5种核心技巧与最佳实践
  • 四大核心视频孪生底层技术专题解析:拓扑图谱打通跨镜全域连续轨迹,分区并行实现超大实景实时重建;空间大模型驱动AI前置风险推演,SpaceOS底座统一四维孪生算力根基。四大技术体系原生耦合闭环,构筑
  • GPT5.5 辅助论文写作实践:选题生成、文献整理与摘要润色流程
  • CRITIC-TOPSIS算法改进与MATLAB实现:供应链决策优化
  • 微信单向好友检测终极指南:3步快速识别谁删除了你