LQ0147 因数平方和数论

Posted 海岛Blog

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LQ0147 因数平方和数论相关的知识,希望对你有一定的参考价值。

题目来源:蓝桥杯2022初赛 Java A组I题

题目描述
记f(x)为x的所有因数的平方的和。例如:f(12)= 12+22+32+42+62+122
定义g(n)=f(1)+f(2)+…+f(n)。
给定n, 求g(n)除以10^9 + 7 的余数。

输入格式
输入一行包含一个正整数n。
对于20% 的评测用例,n ≤ 10^5。
对于30% 的评测用例,n ≤ 10^7。
对于所有评测用例,1 ≤ n ≤ 10^9。
额外补充了5组1 ≤ n ≤ 10^12的数据。

输出格式
输出一个整数表示答案g(n)除以10^9 + 7的余数。

输入样例
100000

输出样例
680584257

问题分析
(略)
也许由于额外补充的n,解题程序只能67%,在某网站上是能AC的。
可能需要用分块算法来实现。

AC的C语言程序如下:

/* LQ0147 因数平方和 */

#include <stdio.h>

typedef long long LL;
#define S 166666668LL
#define MOD 1000000007LL

int main()

    int n;
    scanf("%d", &n);

    LL sum = 0, ans = 0, t;
    for (int i = 1, j; i <= n; i = j + 1) 
        j = n / (n / i);
        t = sum;
        sum = j * (j + 1LL) % MOD * (2LL * j + 1) % MOD * S % MOD;
        ans = (ans + (n / i) * (sum - t) + MOD) % MOD;
    

    printf("%lld\\n", ans);

    return 0;

以上是关于LQ0147 因数平方和数论的主要内容,如果未能解决你的问题,请参考以下文章

LQ0015 质因数个数数论

初等数论初步——最大公因数

POJ 1845Sumdiv——数论 质因数 + 分治 + 快速幂

蓝桥杯每日一真题—— [蓝桥杯 2021 省 AB2] 完全平方数(数论,质因数分解)

LeetCode数论题目总结

数论杂记——约数个数定理