题目 2683:
蓝桥杯2022年第十三届省赛真题-因数平方和
时间限制: 1s 内存限制: 512MB 提交: 299 解决: 58
题目描述
记 f(x) 为 x 的所有因数的平方的和。例如:f(12) = 12 + 22 + 32 + 42 + 62 + 122。
定义
。给定 n, 求 g(n) 除以 109 + 7 的余数。
输入格式
输入一行包含一个正整数 n。
输出格式
输出一个整数表示答案 g(n) 除以 109 + 7 的余数。
样例输入
复制
100000
样例输出
复制
680584257
提示
对于 20% 的评测用例,n ≤ 105。
对于 30% 的评测用例,n ≤ 107。
对于所有评测用例,1 ≤ n ≤ 109。
import java.util.*;
public class Main{
public static void main(String []args)
{final long N=1000000007;
final long inv6=166666668;
Scanner scanner=new Scanner(System.in);
long res=0,temp=0,sum=0;
long n,l,r,k;
n=scanner.nextInt();
for(long i=1;i<=n;i=r+1)
{
l=i;
k=n/i;
r=n/(n/l);
//数论分块
temp=sum;
sum=r*(r+(long)1)%N*((long)2*r+1)%N*inv6%N;
res=(res+k*(sum-temp)+N)%N;//sum-temp减去上半截
}
System.out.println(res);
}
}