\(\text{Problem}\)

\[\left(\sum_{i=1}^n \sum_{j=1}^n i j \gcd(i,j)\right) \bmod p
\]

\(n \le 10^{10},5 \times 10^8 \le p \le 1.1 \times 10^9\) 且 \(p \in \mathbb{P}\)

\(\text{Solution}\)

显然走欧拉反演

\[\begin{aligned}
\sum_{i=1}^n \sum_{j=1}^n i j \gcd(i,j)
&= \sum_{i=1}^n \sum_{j=1}^n i j \sum_{d|\gcd(i,j)} \varphi(d) \\
&= \sum_{d=1}^n \varphi(d) \sum_{d|i} i \sum_{d|j} j \\
&= \sum_{d=1}^n \varphi(d) \sum_{i=1}^{\lfloor \frac n d \rfloor} i \sum_{j=1}^{\lfloor \frac n d \rfloor} j \\
&= \sum_{d=1}^n d^2 \varphi(d) S^3 (\lfloor \frac n d \rfloor)
\end{aligned}
\]

\(\varphi\) 后面的部分可以用等差数列求和公式的平方得到(它恰恰连续自然数三次方和的求和公式)

这个式子显然可以数论分块(非常显然)

那么重点就是求 \(S(n)=\sum_{d=1}^n d^2 \varphi(d)\)

杜教筛即可

即考虑卷积 \(f * g\),记 \(f(n)=n^2 \varphi(n)\),令 \(g = ID^2\)

\[(f * g)(n) = \sum_{d|n} f(d) g(\frac{n}{d}) = \sum_{d|n} d^2 \varphi(d) \left(\frac{n}{d}\right)^2 = n^2 \sum_{d|n} \varphi(d) = n^3
\]

那么

\[\begin{aligned}
g(1)S(n)=\sum_{i=1}^n (f*g)(n) - \sum_{i=2}^n g(i)S(\lfloor \frac n i \rfloor) \\
S(n) = \sum_{i=1}^n i^3 - \sum_{i=2}^n i^2 S(\lfloor \frac n i \rfloor)
\end{aligned}
\]

仍然可以数论分块,利用平方和与立方和公式快速计算

\(\text{Code}\)

#include<cstdio>
#include<tr1/unordered_map>
#define LL long long
#define maxn 5000000
#define N 5000005
using namespace std; int vis[N], phi[N], prime[N], totp;
LL P, n, inv6, sf[N];
tr1::unordered_map<LL, LL> SF; inline LL fpow(LL x, LL y)
{
LL res = 1;
for(; y; y >>= 1)
{
if (y & 1) res = res * x % P;
x = x * x % P;
}
return res;
}
inline LL S2(LL n)
{
n %= P;
return n * (n + 1) % P * (n * 2 + 1) % P * inv6 % P;
}
inline LL S3(LL n)
{
n %= P;
return n * (n + 1) / 2 % P * (n * (n + 1) / 2 % P) % P;
} inline void sieve()
{
vis[1] = phi[1] = 1;
for(register int i = 2; i <= maxn; i++)
{
if (!vis[i]) prime[++totp] = i, phi[i] = i - 1;
for(register int j = 1; j <= totp && prime[j] * i <= maxn; j++)
{
vis[i * prime[j]] = 1;
if (i % prime[j]) phi[i * prime[j]] = phi[i] * phi[prime[j]];
else{phi[i * prime[j]] = phi[i] * prime[j]; break;}
}
}
for(register int i = 1; i <= maxn; i++) sf[i] = (sf[i - 1] + (LL)i * i % P * phi[i] % P) % P;
} LL SumF(LL n)
{
if (n <= maxn) return sf[n];
if (SF[n]) return SF[n];
LL res = S3(n), r;
for(register LL l = 2; l <= n; l = r + 1)
{
r = n / (n / l);
res = (res - (S2(r) - S2(l - 1) + P) % P * SumF(n / l) % P + P) % P;
}
return SF[n] = res;
} int main()
{
scanf("%lld%lld", &P, &n);
sieve();
LL ans = 0, r; inv6 = fpow(6, P - 2);
for(register LL l = 1; l <= n; l = r + 1)
{
r = n / (n / l);
ans = (ans + S3(n / l) * (SumF(r) - SumF(l - 1) + P) % P) % P;
}
printf("%lld\n", ans);
}

LG P3768 简单的数学题的更多相关文章

  1. 洛谷 P3768 简单的数学题 解题报告

    P3768 简单的数学题 题目描述 由于出题人懒得写背景了,题目还是简单一点好. 输入一个整数\(n\)和一个整数\(p,\)你需要求出\((\sum_{i=1}^n\sum_{j=1}^n ijgc ...

  2. Luogu P3768 简单的数学题

    非常恶心的一道数学题,推式子推到吐血. 光是\(\gcd\)求和我还是会的,但是多了个\(ij\)是什么鬼东西. \[\sum_{i=1}^n\sum_{j=1}^nij\gcd(i,j)=\sum_ ...

  3. 【刷题】洛谷 P3768 简单的数学题

    题目描述 由于出题人懒得写背景了,题目还是简单一点好. 输入一个整数n和一个整数p,你需要求出(\(\sum_{i=1}^n\sum_{j=1}^n ijgcd(i,j))~mod~p\),其中gcd ...

  4. P3768 简单的数学题 杜教筛+推式子

    \(\color{#0066ff}{ 题目描述 }\) 由于出题人懒得写背景了,题目还是简单一点好. 输入一个整数n和一个整数p,你需要求出(\(\sum_{i=1}^n\sum_{j=1}^n ij ...

  5. P3768 简单的数学题(莫比乌斯反演)

    [题目链接] https://www.luogu.org/problemnew/show/P3768 [题目描述] 求 \(\sum_{i=1}^{n}\sum_{j=1}^{n}i* j* gcd( ...

  6. 【Luogu】P3768简单的数学题(杜教筛)

    题目链接 emm标题全称应该叫“莫比乌斯反演求出可狄利克雷卷积的公式然后卷积之后搞杜教筛” 然后成功地困扰了我两天qwq 我们从最基本的题意开始,一步步往下推 首先题面给出的公式是$\sum\limi ...

  7. 洛谷 - P3768 - 简单的数学题 - 欧拉函数 - 莫比乌斯反演

    https://www.luogu.org/problemnew/show/P3768 \(F(n)=\sum\limits_{i=1}^{n}\sum\limits_{j=1}^{n}ijgcd(i ...

  8. 洛谷 P3768 简单的数学题

    https://www.luogu.org/problemnew/show/P3768 化简一下式子,就是$\sum_{d=1}^ncalc(d)d^2\varphi(d)$ 其中$calc(d)=\ ...

  9. 洛谷P3768 简单的数学题

    解: 神奇的一批......参观yyb巨神的博客. 大致思路就是第一步枚举gcd,发现后面有个限制是gcd=1,用反演,得到的F(x)是两个等差数列求积. 然后发现有个地方我们除法的除数是乘积,于是换 ...

  10. [P3768]简单的数学题

    Description: 求出\((\sum_{i=1}^n \sum_{j=1}^n ij\ gcd\ (i,j)) mod\ p\) Hint: \(n<=10^{10}​\) Soluti ...

随机推荐

  1. python关于error: invalid command 'bdist_wheel报错的解决

    看了很多解决办法,大部分在扯去下载一个 .whl 源文件然后在pip 安装,经过我亲自测试执行完这句即可解决! pip3 install wheel

  2. ajax 跨域请求jsonp

    最近一段时间为这个事情走了不少弯路,现将成功经验分享,避免后来人再绕远路,不过也是第一次使用中间有什么问题大家可以留言探讨. ajax的跨域请求jsonp主要运用于不同系统的交互,一个系统想通过该种方 ...

  3. Halo 主题 Redemption 首发版

    Redemption 一款专注阅读.写作的 Halo 博客主题.主要设计思想即是专注阅读.写作,是一款极简类型的博客主题. Redemption 部分设计灵感借鉴 Halo 博客 Zozo 主题,感谢 ...

  4. day29 jQuery选择器 & jquery属性操作 & jquery DOM元素 操作与遍历

    简介 jQuery,顾名思义,就是javascript和query(查询),即辅助javascript开发的库,本质就是一个js文件: jQuery是一个js函数库,是目前全球范围内最流行.用的最多的 ...

  5. 【collection】1.java容器之HashMap&LinkedHashMap&Hashtable

    Map源码剖析 HashMap&LinkedHashMap&Hashtable hashMap默认的阈值是0.75 HashMap put操作 put操作涉及3种结构,普通node节点 ...

  6. Springboot 整合 SpringCache 使用 Redis 作为缓存

    一直以来对缓存都是一知半解,从没有正经的接触并使用一次,今天腾出时间研究一下缓存技术,开发环境为OpenJDK17与SpringBoot2.7.5 SpringCache基础概念 接口介绍 首先看看S ...

  7. 1.5.5 HDFS读写解析-hadoop-最全最完整的保姆级的java大数据学习资料

    目录 1.5.5 HDFS读写解析 1.5.5.1 HDFS读数据流程 1.5.5.2 HDFS写数据流程 1.5.5 HDFS读写解析 1.5.5.1 HDFS读数据流程 客户端通过Distribu ...

  8. 多线程爬取wallhaven

    前言 最近整理自己的项目时,发现之前自己写的爬取wallhaven网站顿时有来的兴趣决定再写一遍来回顾自己以前学的知识 网站地址:"https://wallhaven.cc/" 1 ...

  9. ArcObjects SDK开发 022 开发框架搭建-FrameWorkUI包设计

    1.CommandUIs部分 这部分主要是定义承载Command和Tool的具体UI.如下图所示. 以CommandUI结尾的这几个类都是继承了Framework.Engine里面的ICommandU ...

  10. .Net 7 被Microsoft的开源免费PowerToys工具独立附带

    楔子 什么是PowerToys? Microsoft PowerToys 是一组实用工具,可帮助高级用户调整和简化其 Windows 体验,从而提高工作效率. 简而言之,就是给最新的windows11 ...