题目要求
分析
这是一个数论题,这种数学题你要是盲目开暴力可能会很菜或者想不出思路,这里讲讲比较666的思路。
可以用纯数学证明一种时间复杂度为 的算法:
而对于该算法具体实现的解读可以推荐看这篇 的文章
我可以给大家看一下我是怎么编辑公式的,这个对大家也很有用的:
Latex语法补充
向上取整:
$\lfloor x \rfloor$
向下取整:
$\lceil x \rceil$
分数:
扫描二维码关注公众号,回复:
9815941 查看本文章
$\frac{x}{y}$
积分号:
$\sum\limits_{i=1}^{n}\sigma(i)$
注意,想要上下限不在右侧而是上下侧,需要加上\limits
实在看不懂?没关系(除非你是搞竞赛的),你看得懂代码就行了!
AC代码(Java语言描述)
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int num = scanner.nextInt();
scanner.close();
int result = 0;
for(int i = 1, j; i <= num; i = j+1) {
j = num/(num/i);
result += (num/i)*(j-i+1);
}
System.out.println(result);
}
}