c++ - 找到数 n 小于 k 的除数的有效方法
问题描述
我已经这样做了:-
int divisors(int div, int i) {
int ans = 0;
for (int j = 1; j * j <= div; j++) {
if (div % j == 0) {
if (div / j == j && j < i)ans++;
else {
if (j < i && div / j < i) {
ans += 2;
}
else if (j < i) {
ans += 1;
}
else {
break;
}
}
}
}
return ans;
}
但是这需要 O(sqrt(div)) 时间,我有办法优化这个吗?
解决方案
你不能低于,O(sqrt(N))
因为在最坏的情况下k = N
,你将不得不遍历直到sqrt(N)
推荐阅读
- couchbase - Couchbase - 获取所有文档前缀
- php - 使用 orWhere 与 eloquent
- json - 使用 React 从 JSON 获取数据给出空白页面
- python - 有没有什么时候最好将同一个列表切片两次?
- error-correction - 为什么 CCSDS 推荐的 BCH 纠错多项式不适用于 bchlib?
- javascript - Google App Script 使用 if/else 条件语句在循环中添加 180 天
- python - 程序激活错误的谷歌云平台项目
- perl - 为什么 Perl pos() 总是返回 undef?
- python - 如何忽略输入键/将其视为 Python 中的空格键?
- javascript - 在问答游戏中基于使用对象数组选择正确答案来增加分数