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

csp信奥赛C++之约数研究

csp信奥赛C++之约数研究

原题说明:洛谷P1403 [AHOI2005] 约数研究

题目描述

科学家们在 Samuel 星球上的探险得到了丰富的能源储备,这使得空间站中大型计算机 Samuel II 的长时间运算成为了可能。由于在去年一年的辛苦工作取得了不错的成绩,小联被允许用 Samuel II 进行数学研究。

小联最近在研究和约数有关的问题,他统计每个正数N NN的约数的个数,并以f ( N ) f(N)f(N)来表示。例如12 1212的约数有1 , 2 , 3 , 4 , 6 , 12 1,2,3,4,6,121,2,3,4,6,12,因此f ( 12 ) = 6 f(12)=6f(12)=6。下表给出了一些f ( N ) f(N)f(N)的取值:

N NN1 112 223 334 445 556 66
f ( N ) f(N)f(N)1 112 222 223 332 224 44

现在请你求出:

∑ i = 1 n f ( i ) \sum_{i=1}^n f(i)i=1nf(i)

输入格式

输入一个整数n nn

输出格式

输出答案。

输入输出样例 1
输入 1
3
输出 1
5
说明/提示
  • 对于20 % 20\%20%的数据,N ≤ 5000 N \leq 5000N5000
  • 对于100 % 100\%100%的数据,1 ≤ N ≤ 10 6 1 \leq N \leq 10^61N106

暴力代码

#include<bits/stdc++.h>usingnamespacestd;intn,sum=0;// n 为输入上限,sum 累计所有 f(i) 的和// 计算 x 的约数个数intf(intx){intcnt=0;// 约数计数器// 只需枚举到 sqrt(x) 即可成对统计for(inti=1;i<=sqrt(x);i++){if(x%i==0){// i 是 x 的约数cnt+=2;// 将 i 和 x/i 这一对都计入}if(i*i==x){// 若 i 恰好等于 x/i,说明是平方数,之前多算了一次cnt--;// 减去重复的一次}}returncnt;}intmain(){cin>>n;// 输入 n// 枚举 1 到 n 的每个数,累加它们的约数个数for(inti=1;i<=n;i++){sum+=f(i);}cout<<sum;// 输出结果return0;}
暴力代码TLE 原因分析
  • 数据范围:题目中 (n) 最大可达10 6 10^6106
  • 外层循环:共执行n = 10 6 n = 10^6n=106次。
  • 内层函数f(i):对于每个 i,需要循环i \sqrt{i}i次(取整)。
    总计算量约为:∑ i = 1 n i ≈ ∫ 0 n x d x = 2 3 n 3 / 2 \sum_{i=1}^{n} \sqrt{i} \approx \int_{0}^{n} \sqrt{x} \, dx = \frac{2}{3} n^{3/2}i=1ni0nxdx=32n3/2
    代入 (n = 10^6):
    2 3 × ( 10 6 ) 3 / 2 = 2 3 × 10 9 ≈ 6.67 × 10 8 \frac{2}{3} \times (10^6)^{3/2} = \frac{2}{3} \times 10^9 \approx 6.67 \times 10^832×(106)3/2=32×1096.67×108
    即大约 6.7 亿次循环迭代。
  • 结论:暴力枚举每个数的约数个数的方法在n = 10 6 n=10^6n=106时无法通过时限,必须采用更高效的数学方法(如统计每个约数出现的次数)。

优化思路分析

更高效的方法:转换角度,统计每个正整数 d作为约数出现在多少个 i 中。
对于给定的 d,在1 ∼ n 1 \sim n1n中,d 的倍数有⌊ n d ⌋ \left\lfloor \frac{n}{d} \right\rfloordn个,因此 d对总和的贡献就是⌊ n d ⌋ \left\lfloor \frac{n}{d} \right\rfloordn
于是:∑ i = 1 n f ( i ) = ∑ d = 1 n ⌊ n d ⌋ \sum_{i=1}^n f(i) = \sum_{d=1}^n \left\lfloor \frac{n}{d} \right\rfloori=1nf(i)=d=1ndn
直接循环 d = 1 到 n 累加即可,时间复杂度 O(n),空间复杂度 O(1)。
对于n ≤ 10 6 n \le 10^6n106,完全可行。

AC代码

#include<bits/stdc++.h>// 万能头文件usingnamespacestd;intmain(){intn;// 输入的上限scanf("%d",&n);// 读入 nlonglongans=0;// 答案可能超出 int 范围,使用 long long// 枚举每个可能的约数 d,统计它出现的次数并累加for(intd=1;d<=n;++d){ans+=n/d;// d 作为约数出现的次数 = floor(n / d)}printf("%lld\n",ans);// 输出结果return0;}

【文末福利:一等奖秘籍汇总】(完整csp信奥赛C++学习资料):

1、csp/信奥赛C++,完整信奥赛系列课程(永久学习):

https://edu.csdn.net/lecturer/7901 点击跳转

2、CSP信奥赛C++竞赛拿奖视频课:

https://edu.csdn.net/course/detail/40437 点击跳转

3、csp信奥赛高频考点知识详解及案例实践:

CSP信奥赛C++动态规划:
https://blog.csdn.net/weixin_66461496/category_13096895.html点击跳转

CSP信奥赛C++标准模板库STL:
https://blog.csdn.net/weixin_66461496/category_13108077.html 点击跳转

信奥赛C++提高组csp-s知识详解及案例实践:
https://blog.csdn.net/weixin_66461496/category_13113932.html 点击跳转

4、csp信奥赛冲刺一等奖有效刷题题解:

CSP信奥赛C++初赛及复赛高频考点真题解析(持续更新):https://blog.csdn.net/weixin_66461496/category_12808781.html 点击跳转

信奥赛C++提高组csp-s初赛&复赛真题题解(持续更新):
https://blog.csdn.net/weixin_66461496/category_13125089.html 点击跳转

5、GESP C++考级真题题解:

GESP(C++ 一级+二级+三级)真题题解(持续更新):https://blog.csdn.net/weixin_66461496/category_12858102.html 点击跳转

GESP(C++ 四级+五级+六级)真题题解(持续更新):https://blog.csdn.net/weixin_66461496/category_12869848.html 点击跳转


GESP(C++ 七级+八级)真题题解(持续更新):
https://blog.csdn.net/weixin_66461496/category_13117178.html 点击跳转

· 文末祝福 ·

#include<bits/stdc++.h>usingnamespacestd;intmain(){cout<<"跟着王老师一起学习信奥赛C++";cout<<" 成就更好的自己! ";cout<<" csp信奥赛一等奖属于你! ";return0;}

http://www.jsqmd.com/news/408931/

相关文章:

  • 基于javaweb的宠物猫狗商业系统(11889)
  • 前端人狂喜:文心4.0一键生成中文技术视频,加特效字幕简直不要太丝滑
  • GESP认证C++编程真题解析 | 202512 五级
  • 2026年推荐的1*7钢绞线生产厂家排行榜,帮你寻找优质产品 - 睿易优选
  • 基于JavaWeb的社区养老服务信息管理系统(11890)
  • 2026年如何选择口碑好的无人机电池厂家与聚合物锂电池品牌? - 睿易优选
  • 2026广东最新装修瓷砖厂商top10推荐!佛山等地建陶/环保/家装/工程全场景优质瓷砖制造商权威榜单发布 - 十大品牌榜
  • 2026年高端锂电池源头厂家推荐,主要有哪些专业供应商? - 睿易优选
  • 从“苍穹外卖”到“敕勒食驿”:一次不再“烂大街”的项目升级实战
  • 26年春节AI发展大事记
  • GESP认证C++编程真题解析 | 202512 四级
  • 基于JavaEE的服饰商城网站的设计与实现(11887)
  • GESP认证C++编程真题解析 | 202512 三级
  • 2026普通外科学主治考试跟谁学?三位实战讲师深度解析,这样选不踩坑 - 医考机构品牌测评专家
  • 张千叶:待播清单手握八部大戏,这位“小倪妮”要凭气场杀出重围?
  • 基于javascript的网上书店管理系统(11888)
  • 蓝桥杯算法提高VIP-种树
  • 上岸考生心得!2026普通外科主治考试:选课实录,这两位老师值得跟 - 医考机构品牌测评专家
  • 零开销抽象”(Zero-cost Abstraction)
  • 基于Java技术的大学生课程管理系统(11886)
  • 2026主治医师备考:三位“宝藏老师”深度解析,这样搭配效率翻倍 - 医考机构品牌测评专家
  • Linux驱动复习——驱动
  • RLinf团队新作|让 VLA的RL任务在想象里训练,又不被骗!
  • 做豆包广告需要哪些具体步骤?联系哪家公司? - 品牌2025
  • 2026主治医师听谁的课?五位老师真实口碑,选对跟谁不纠结 - 医考机构品牌测评专家
  • 基于vue+springboot智能医疗辅助就诊系统
  • 在“仿真数据”与“海量真机”之外,寻找第三条路!RL-Co:VLA 真机提升新范式
  • 2026春节后复工如何稳住免疫力?五大营养路径怎么选,真的能从被动防御走向主动修复吗? - 品牌企业推荐师(官方)
  • 【HtmlCSS】网页设计中的Node.JS 安装
  • 2026春季免疫力稳态指南:后疫情五大营养路径深拆,从被动防御到主动修复 - 品牌企业推荐师(官方)