P3768 简单的数学题(杜教筛)

P3768 简单的数学题

题目描述

输入一个整数 (n) 和一个整数 (p),你需要求出:

[largeleft(sum_{i=1}^nsum_{j=1}^n ij gcd(i,j) ight) mod p ]

其中 (gcd(a,b)) 表示 (a)(b) 的最大公约数。

数据范围

(n leq 10^{10}, 5 imes 10^8 leq p leq 1.1 imes 10^9)(p) 为质数。

解题思路

先推一波式子

[large sum_{i=1}^nsum_{j=1}^n ij gcd(i,j)\ large = sum_{d=1}^ndsum_{i=1}^{frac nd}sum_{j=1}^{frac nd} ijd^2 [gcd(i,j)=1]\ large = sum_{d=1}^nd^3sum_{k=1}^{frac nd}mu(k)k^2sum_{i=1}^{frac n{dk}}sum_{j=1}^{frac n{dk}} ij\ large = sum_{T=1}^nT^2sum_{k|T}mu(k)frac Tksum_{i=1}^{frac n{T}}sum_{j=1}^{frac n{T}} ij\ large = sum_{T=1}^nT^2varphi(T)sum_{i=1}^{frac n{T}}sum_{j=1}^{frac n{T}} ij\ large = sum_{T=1}^nSum(frac nT)^2(T^2varphi(T))\ ]

后面的可以杜教筛,前面的整除分块即可

原文地址:https://www.cnblogs.com/Hs-black/p/13095117.html