LG P3768 简单的数学题
\(\text{Problem}\)
求
\]
\(n \le 10^{10},5 \times 10^8 \le p \le 1.1 \times 10^9\) 且 \(p \in \mathbb{P}\)
\(\text{Solution}\)
显然走欧拉反演
\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\)
\]
那么
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 简单的数学题的更多相关文章
- 洛谷 P3768 简单的数学题 解题报告
P3768 简单的数学题 题目描述 由于出题人懒得写背景了,题目还是简单一点好. 输入一个整数\(n\)和一个整数\(p,\)你需要求出\((\sum_{i=1}^n\sum_{j=1}^n ijgc ...
- Luogu P3768 简单的数学题
非常恶心的一道数学题,推式子推到吐血. 光是\(\gcd\)求和我还是会的,但是多了个\(ij\)是什么鬼东西. \[\sum_{i=1}^n\sum_{j=1}^nij\gcd(i,j)=\sum_ ...
- 【刷题】洛谷 P3768 简单的数学题
题目描述 由于出题人懒得写背景了,题目还是简单一点好. 输入一个整数n和一个整数p,你需要求出(\(\sum_{i=1}^n\sum_{j=1}^n ijgcd(i,j))~mod~p\),其中gcd ...
- P3768 简单的数学题 杜教筛+推式子
\(\color{#0066ff}{ 题目描述 }\) 由于出题人懒得写背景了,题目还是简单一点好. 输入一个整数n和一个整数p,你需要求出(\(\sum_{i=1}^n\sum_{j=1}^n ij ...
- P3768 简单的数学题(莫比乌斯反演)
[题目链接] https://www.luogu.org/problemnew/show/P3768 [题目描述] 求 \(\sum_{i=1}^{n}\sum_{j=1}^{n}i* j* gcd( ...
- 【Luogu】P3768简单的数学题(杜教筛)
题目链接 emm标题全称应该叫“莫比乌斯反演求出可狄利克雷卷积的公式然后卷积之后搞杜教筛” 然后成功地困扰了我两天qwq 我们从最基本的题意开始,一步步往下推 首先题面给出的公式是$\sum\limi ...
- 洛谷 - P3768 - 简单的数学题 - 欧拉函数 - 莫比乌斯反演
https://www.luogu.org/problemnew/show/P3768 \(F(n)=\sum\limits_{i=1}^{n}\sum\limits_{j=1}^{n}ijgcd(i ...
- 洛谷 P3768 简单的数学题
https://www.luogu.org/problemnew/show/P3768 化简一下式子,就是$\sum_{d=1}^ncalc(d)d^2\varphi(d)$ 其中$calc(d)=\ ...
- 洛谷P3768 简单的数学题
解: 神奇的一批......参观yyb巨神的博客. 大致思路就是第一步枚举gcd,发现后面有个限制是gcd=1,用反演,得到的F(x)是两个等差数列求积. 然后发现有个地方我们除法的除数是乘积,于是换 ...
- [P3768]简单的数学题
Description: 求出\((\sum_{i=1}^n \sum_{j=1}^n ij\ gcd\ (i,j)) mod\ p\) Hint: \(n<=10^{10}\) Soluti ...
随机推荐
- python关于error: invalid command 'bdist_wheel报错的解决
看了很多解决办法,大部分在扯去下载一个 .whl 源文件然后在pip 安装,经过我亲自测试执行完这句即可解决! pip3 install wheel
- ajax 跨域请求jsonp
最近一段时间为这个事情走了不少弯路,现将成功经验分享,避免后来人再绕远路,不过也是第一次使用中间有什么问题大家可以留言探讨. ajax的跨域请求jsonp主要运用于不同系统的交互,一个系统想通过该种方 ...
- Halo 主题 Redemption 首发版
Redemption 一款专注阅读.写作的 Halo 博客主题.主要设计思想即是专注阅读.写作,是一款极简类型的博客主题. Redemption 部分设计灵感借鉴 Halo 博客 Zozo 主题,感谢 ...
- day29 jQuery选择器 & jquery属性操作 & jquery DOM元素 操作与遍历
简介 jQuery,顾名思义,就是javascript和query(查询),即辅助javascript开发的库,本质就是一个js文件: jQuery是一个js函数库,是目前全球范围内最流行.用的最多的 ...
- 【collection】1.java容器之HashMap&LinkedHashMap&Hashtable
Map源码剖析 HashMap&LinkedHashMap&Hashtable hashMap默认的阈值是0.75 HashMap put操作 put操作涉及3种结构,普通node节点 ...
- Springboot 整合 SpringCache 使用 Redis 作为缓存
一直以来对缓存都是一知半解,从没有正经的接触并使用一次,今天腾出时间研究一下缓存技术,开发环境为OpenJDK17与SpringBoot2.7.5 SpringCache基础概念 接口介绍 首先看看S ...
- 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 ...
- 多线程爬取wallhaven
前言 最近整理自己的项目时,发现之前自己写的爬取wallhaven网站顿时有来的兴趣决定再写一遍来回顾自己以前学的知识 网站地址:"https://wallhaven.cc/" 1 ...
- ArcObjects SDK开发 022 开发框架搭建-FrameWorkUI包设计
1.CommandUIs部分 这部分主要是定义承载Command和Tool的具体UI.如下图所示. 以CommandUI结尾的这几个类都是继承了Framework.Engine里面的ICommandU ...
- .Net 7 被Microsoft的开源免费PowerToys工具独立附带
楔子 什么是PowerToys? Microsoft PowerToys 是一组实用工具,可帮助高级用户调整和简化其 Windows 体验,从而提高工作效率. 简而言之,就是给最新的windows11 ...