AcWing 4662. 【数学, 数论分块】因数平方和【蓝桥杯】 |
您所在的位置:网站首页 › 825的因数和 › AcWing 4662. 【数学, 数论分块】因数平方和【蓝桥杯】 |
转到我的博客阅读:【数学】因数平方和【蓝桥杯】 题目因数平方和 - 蓝桥云课 4662. 因数平方和 - AcWing题库 问题描述 记 $f(x)$ 为 $x$ 的所有因数的平方的和。例如: $f(12)=1^{2}+2^{2}+3^{2}+4^{2}+6^{2}+$ $12^{2}$ 定义 $g(n)=\sum_{i=1}^{n} f(i)$ 。给定 $n$ , 求 $g(n)$ 除以 $10^{9}+7$ 的余数。 输入格式 输入一行包含一个正整数 $n$ 。 输出格式 输出一个整数表示答案 $g(n)$ 除以 $10^{9}+7$ 的余数。 样例输入 100000样例输出 680584257评测用例规模与约定 对于 $20 \%$ 的评测用例, $n \leq 10^{5}$ 。 对于 $30 \%$ 的评测用例, $n \leq 10^{7}$ 。 对于所有评测用例, $1 \leq n \leq 10^{9}$ 。 运行限制 最大运行时间:1s 最大运行内存: 512M 解题 方法一:暴力 枚举 (20%) 思路最简单直接的暴力做法,对 $1 \sim n$ 中每个数求因子平方和并累和。 求一个数的所有因子用到了试除法求约数。 $O(n\log{n})$ 的时间复杂度很明显只能过掉前 $20\%$ 的数据( $1 \le n \le 10^5$ )。 代码 import java.util.*; public class Main { static final int MOD = (int) 1e9 + 7; static long f(int x) { long res = 0L; for (long i = 1; i = 1; } return res; } // 平方和公式 每一步都要取模 static long s(long n) { return n * (n + 1) % MOD * (2 * n + 1) % MOD * inv % MOD; } public static void main(String[] args) { Scanner in = new Scanner(System.in); int n = in.nextInt(); long ans = 0L; // 求6在模MOD意义下的逆元 inv = quickPow(6, MOD - 2, MOD); for (int l = 1; l |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |