"约数研究"问题的算法优化和推导证明(洛谷P1403题题解,Java语言描述,含Latex公式编辑知识)

题目要求

P1403题目链接

在这里插入图片描述


分析

这是一个数论题,这种数学题你要是盲目开暴力可能会很菜或者想不出思路,这里讲讲比较666的思路。

O ( n ) O(n) 复杂度解法

可以用纯数学证明一种时间复杂度为 O ( n ) O(\sqrt{n}) 的算法:

i = 1 n σ ( i ) = i = 1 n d i 1 = i = 1 n d = 1 n [ d i ] = d = 1 n i = 1 n [ d i ] = d = 1 n d i \sum\limits_{i=1}^{n}\sigma(i) = \sum\limits_{i=1}^{n}\sum\limits_{d|i}1 = \sum\limits_{i=1}^{n}\sum\limits_{d=1}^{n}{[d|i]} = \sum\limits_{d=1}^{n}\sum\limits_{i=1}^{n}{[d|i]} = \sum\limits_{d=1}^{n}{\lfloor{\frac{d}{i}}\rfloor}

而对于该算法具体实现的解读可以推荐看这篇 d a l a o dalao 的文章


我可以给大家看一下我是怎么编辑公式的,这个对大家也很有用的:
在这里插入图片描述


Latex语法补充

向上取整: x \lfloor x \rfloor

$\lfloor x \rfloor$

向下取整: x \lceil x \rceil

$\lceil x \rceil$

分数: x y \frac{x}{y}

扫描二维码关注公众号,回复: 9815941 查看本文章
$\frac{x}{y}$

积分号: i = 1 n σ ( i ) \sum\limits_{i=1}^{n}\sigma(i)

$\sum\limits_{i=1}^{n}\sigma(i)$

注意,想要上下限不在右侧而是上下侧,需要加上\limits

W a n t Want T o To K n o w Know M o r e More ? ? L o o k Look A t At H e r e Here ! !


实在看不懂?没关系(除非你是搞竞赛的),你看得懂代码就行了!

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);
    }
}
发布了695 篇原创文章 · 获赞 1483 · 访问量 67万+

猜你喜欢

转载自blog.csdn.net/weixin_43896318/article/details/104835676