算法学习
今天学习了约数的个数怎么求,一般的算法会超时。这时我们需要用到一个定理:p=[n/i]:表示在[1,n]的区间内,有约数i的个数为p个。所以这时,在求约数个数的问题上,我们只需要遍历[1,n],设置一个计数器即可。
当n很大时,跨越太大,这时i++、就会很慢,设置j = n/ (n/i)+1;下一次让i = j;这样跨度较大,时间复杂度较小。
参考资料:http://t.csdnimg.cn/TYwdJ
代码实现:
#include<iostream>
#include<cstdio>
using namespace std;
int main() {
int n;
cin >> n;
int res = 0;
int i, j;
for (i = 1; i <= n; i = j) {
j = n / (n / i) + 1;
res += (n / i ) * (j - i);
}
cout << res << endl;
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南