AcWing 4662. 【数学, 数论分块】因数平方和【蓝桥杯】

您所在的位置:网站首页 825的因数和 AcWing 4662. 【数学, 数论分块】因数平方和【蓝桥杯】

AcWing 4662. 【数学, 数论分块】因数平方和【蓝桥杯】

2024-07-01 09:37| 来源: 网络整理| 查看: 265

转到我的博客阅读:【数学】因数平方和【蓝桥杯】

题目

因数平方和 - 蓝桥云课

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