Description

传送门

给一个整数\(n\),让你求

\[\sum\limits_{i=1}^n \sum\limits_{j=1}^n ij\gcd(i,j)
\]

对一个大质数\(p\)取模。

保证\(n \le 10^{10},5\times 10^{8} \le p \le 1.1 \times 10^9\),\(p\)为质数

Solutions

先来推柿子好了,枚举\(\gcd\)的取值,有

\[\begin{aligned}
Ans&=\sum\limits_{k} k\sum\limits_{i=1}^n\sum\limits_{j=1}^n ij[\gcd(i,j)=k] \\
&=\sum\limits_{k} k^3 \sum\limits_{i=1}^{\lfloor\frac{n}{k}\rfloor}\sum\limits_{j=1}^{\lfloor\frac{n}{k}\rfloor} ij[\gcd(i,j)=1]
\end{aligned}
\]

考虑求\(Sum(n)=\sum\limits_{i=1}^n\sum\limits_{j=1}^n ij[\gcd(i,j)=1]\)

推柿子

\[\begin{aligned}
Sum(n)&=\sum\limits_{i=1}^n\sum\limits_{j=1}^n ij\sum\limits_{d\mid \gcd(i,j)} \mu(d) \\
&= \sum\limits_{d} \mu(d) \sum\limits_{i=1}^{\lfloor n/d\rfloor}id\sum\limits_{j=1}^{\lfloor n/d\rfloor} jd \\
&= \sum\limits_{d} \mu(d)d^2 s(\lfloor\frac{n}{d}\rfloor)^2
\end{aligned}
\]

其中\(s(n)=1+2+\cdots+n=\frac{n(n+1)}{2}\)。

所以

\[\begin{aligned}
Ans&=\sum\limits_{k} k^3 Sum(\lfloor\frac{n}{k}\rfloor) \\
&=\sum\limits_{k} k^3 \sum\limits_{d} \mu(d)d^2 s(\lfloor\frac{\lfloor n/k\rfloor}{d}\rfloor) \\
&=\sum\limits_{k} k^3 \sum\limits_{d} \mu(d)d^2 s(\lfloor\frac{n}{kd}\rfloor)
\end{aligned}
\]

枚举\(T=kd\),有

\[\begin{aligned}
Ans&=\sum\limits_{T} s(\lfloor\frac{n}{T}\rfloor) \sum\limits_{d\mid T} \mu(d)d^2(\frac{T}{d})^3 \\
&=\sum\limits_{T} s(\lfloor\frac{n}{T}\rfloor)T^2\sum\limits_{d\mid T}\mu(d)\times \frac{T}{d}
\end{aligned}
\]

令\(f(n)=n^2\sum\limits_{d\mid n} \mu(d)\times \frac{n}{d}\),如果能快速求出\(f\)的前缀和的话我们对上面的柿子数论分块就好了。

观察到后面的和式是\(\mu\)与\(id\)的Dirichlet卷积的形式,假设

\[F(n)=\sum\limits_{d\mid n} \mu(d)\times \frac{n}{d}
\]

根据莫比乌斯反演的结论,必有

\[n=\sum\limits_{d\mid n} F(d)
\]

可以得到\(F(n)=\varphi(n)\),所以\(f(n)=n^2\varphi(n)\),我们想快速求出\(f\)的前缀和,\(n\le 10^{10}\),线筛又死了。

可以考虑杜教筛(djs?),令\(S(n)=\sum\limits_{i=1}^n f(i)\),我们想找到另一个积性函数\(g\),让\(f*g\)好看一点,我们知道欧拉函数有一个很美妙的性质\(\sum\limits_{d\mid n} \varphi(n)=n\),所以为了把\(f\)中的\(n^2\)消掉,配\(g(n)=n^2\)即可,有

\[h(n)=(f*g)(n)=\sum\limits_{d\mid n} f(d)g(\frac{n}{d})=\sum\limits_{d\mid n} n^2\varphi(d)
\]

即\(h(n)=n^2\sum\limits_{d\mid n} \varphi(n)=n^3\),

愉快的套柿子

\[S(n)=\sum\limits_{i=1}^n h(i)-\sum\limits_{i=2}^n g(i)S(\lfloor\frac{n}{i}\rfloor)=\sum\limits_{i=1}^n i^3-\sum\limits_{i=2}^n i^2S(\lfloor \frac{n}{i}\rfloor)
\]

用一点小学奥数的知识,我们知道\(1^3+2^3+\cdots+n^3=(1+2+\cdots+n)^2\),\(1^2+2^3+\cdots+n^2=\frac{n(n+1)(2n+1)}{6}\),所以

\[S(n)=s(n)^2-\sum\limits_{i=2}^n i^2S(\lfloor\frac{n}{i}\rfloor)
\]

后面的显然可以数论分块,于是处理\(f\)的前缀和的话杜教筛就好了。

再写一遍答案的柿子

\[Ans=\sum\limits_{T} s(\lfloor\frac{n}{T}\rfloor)f(T)
\]

对\(T\)数论分块+杜教筛就没了。

#include <bits/stdc++.h>
using namespace std;
#define rep(i,a,b) for (int i=(a);i<(b);++i)
#define per(i,a,b) for (int i=(a)-1;i>=(b);--i)
#define mp make_pair
#define pb push_back
#define fi first
#define se second
#define all(x) (x).begin(),(x).end()
#define SZ(x) ((int)(x).size())
typedef double db;
typedef long long ll;
typedef pair<int,int> PII;
typedef vector<int> VI; const int maxn=5e6,N=maxn+10;
int mod,i2,i6;
inline int add(int x,int y) {return (x+=y)>=mod?x-mod:x;}
inline int sub(int x,int y) {return (x-=y)<0?x+mod:x;}
inline int normal(ll x) {return x<0?x+mod:x;}
inline int fpow(int x,int y) {
int ret=1; for(;y;y>>=1,x=1ll*x*x%mod)
if(y&1) ret=1ll*ret*x%mod;
return ret;
}
inline int sqr(int x) {return 1ll*x*x%mod;}
inline void initmod(int P) {
mod=P;
i2=fpow(2,mod-2),i6=fpow(6,mod-2);
} inline int ss1(ll n) {n%=mod;return 1ll*n*(n+1)%mod*i2%mod;}
inline int ss2(ll n) {n%=mod;return 1ll*n*(n+1)%mod*(2*n+1)%mod*i6%mod;}
inline int s1(ll l,ll r) {return sub(ss1(r),ss1(l-1));}
inline int s2(ll l,ll r) {return sub(ss2(r),ss2(l-1));} int p[N],pn,phi[N];
bool vis[N]; void sieve(int n) {
phi[1]=1;
rep(i,2,n+1) {
if(!vis[i]) {phi[i]=i-1;p[pn++]=i;}
for(int j=0;j<pn&&i*p[j]<=n;j++) {
vis[i*p[j]]=1;
if(i%p[j]==0) {phi[i*p[j]]=phi[i]*p[j];break;}
else phi[i*p[j]]=phi[i]*phi[p[j]];
}
}
rep(i,1,n+1) phi[i]=add(phi[i-1],1ll*i*i%mod*phi[i]%mod);
} map<ll,int> fsum;
int Sf(ll n) {
if(n<=maxn) return phi[n];
if(fsum.count(n)) return fsum[n];
int ans=sqr(ss1(n));
for(ll l=2,r=0;l<=n;l=r+1) {
r=n/(n/l);
ans=sub(ans,1ll*s2(l,r)*Sf(n/l)%mod);
}
return fsum[n]=ans;
} int main() {
#ifdef LOCAL
freopen("a.in","r",stdin);
#endif
int p; ll n; scanf("%d%lld",&p,&n);
initmod(p),sieve(maxn);
int ans=0;
for(ll l=1,r=0;l<=n;l=r+1) {
r=n/(n/l);
ans=add(ans,1ll*sub(Sf(r),Sf(l-1))*sqr(ss1(n/l))%mod);
}
printf("%d\n",ans);
return 0;
}

[题解] LuoguP3768 简单的数学题的更多相关文章

  1. luoguP3768 简单的数学题

    题目链接 luoguP3768 简单的数学题 题解 上面那个式子的最后一步,需要定理 用数学归纳法证明 \(S1=1^3=1^2\) \(S2=1^3+2^3=9=3^2=(1+2)^2\) \(S3 ...

  2. luoguP3768简单的数学题

    大佬们绕道吧(或跳到错误&启发后下一根横线后) 这道题吧正解是莫比乌斯反演吧,但本人有一种独创玄妙的想法去偏分 这道题是让我们求这个对吧 \((\sum_{i=1}^n\sum_{j=1}^n ...

  3. 【Luogu3768】简单的数学题(莫比乌斯反演,杜教筛)

    [Luogu3768]简单的数学题(莫比乌斯反演,杜教筛) 题面 洛谷 \[求\sum_{i=1}^n\sum_{j=1}^nijgcd(i,j)\] $ n<=10^9$ 题解 很明显的把\( ...

  4. 【LG3768】简单的数学题

    [LG3768]简单的数学题 题面 求 \[ (\sum_{i=1}^n\sum_{j=1}^nij\text{gcd}(i,j))\text{mod}p \] 其中\(n\leq 10^{10},5 ...

  5. loj#6229 这是一道简单的数学题

    \(\color{#0066ff}{ 题目描述 }\) 这是一道非常简单的数学题. 最近 LzyRapxLzyRapx 正在看 mathematics for computer science 这本书 ...

  6. 「洛谷P3768」简单的数学题 莫比乌斯反演+杜教筛

    题目链接 简单的数学题 题目描述 输入一个整数n和一个整数p,你需要求出 \[\sum_{i=1}^n\sum_{j=1}^n (i\cdot j\cdot gcd(i,j))\ mod\ p\]  ...

  7. LG3768 简单的数学题

    P3768 简单的数学题 题目描述 输入一个整数n和一个整数p,你需要求出$(\sum_{i=1}^n\sum_{j=1}^n ijgcd(i,j))~mod~p$,其中gcd(a,b)表示a与b的最 ...

  8. 【数学】HPU--1037 一个简单的数学题

    1037: 一个简单的数学题 [数学] 时间限制: 1 Sec 内存限制: 128 MB提交: 259 解决: 41 统计 题目描述 小明想要知道$a^b$的值,但是这个值会非常的大. 所以退而求其次 ...

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

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

随机推荐

  1. jdk 档案库(包含历史版本)

    http://java.sun.com/products/archive/ 参考:https://blog.csdn.net/shiluyong8068/article/details/7894747 ...

  2. 夯实Java基础(十九)——集合

    1.前言 集合在Java中的地位想必大家都知道,不用多BB了.无论是在我们现在的学习中还是在今后的工作中,集合这样一个大家族都无处不在,无处不用.在前面讲到的数组也是一个小的容器,但是数组不是面向对象 ...

  3. static在c\c++中的作用(翁恺c++公开课[28-29]学习笔记)

    static相对来说是一个较复杂的修饰符,c++中的static在c的基础之上又包含了static在类中的应用(也就是说多了static的成员变量和static的成员函数):c\c++中静态变量.对象 ...

  4. JS原型与原型链继承的理解

    一.原型 先从构造函数开始吧! 构造函数是什么?构造函数与其他函数唯一的区别在于调用方式不同.任何函数只要通过new来调用就可以作为构造函数,它是用来创建特定类型的对象. 下面定义一个构造函数 Fem ...

  5. Python 爬取 北京市政府首都之窗信件列表-[数据处理]

    日期:2020.01.24 博客期:132 星期五 [代码说明,如果要使用此页代码,必须在本博客页面评论区给予说明] //博客总体说明 1.准备工作 2.爬取工作 3.数据处理(本期博客) 4.信息展 ...

  6. Eclipse配置maven和新建maven工程

    1 安装配置Maven 1.1 下载Maven 从Apache网站 http://maven.apache.org/ 下载并且解压缩安装Apache Maven.  Maven下载地址: http:/ ...

  7. 「CSP-S模拟赛」2019第四场

    「CSP-S模拟赛」2019第四场 T1 「JOI 2014 Final」JOI 徽章 题目 考场思考(正解) T2 「JOI 2015 Final」分蛋糕 2 题目 考场思考(正解) T3 「CQO ...

  8. 「ZJOI2006」物流运输

    题目 [内存限制:$256MiB$][时间限制:$1000ms$] [标准输入输出][题目类型:传统][评测方式:文本比较] [题目描述] 物流公司要把一批货物从码头 A 运到码头 B.由于货物量比较 ...

  9. 课堂测试用javaweb写一个注册界面,并将数据保存到后台数据库(部分完成)

    今天我到现在为止,也只完成了数据库的连接,还没有写前台的javascript的检查输入的代码,打算周四前完成. 代码如下: package Dao; import java.sql.Connectio ...

  10. JS截取腾讯视频和去除视频广告

    一:腾讯视频截取 H5视频播放除了video标签以外,还有iframe嵌套视频 项目需求是用户输入腾讯视频的html链接,如 https://v.qq.com/x/page/y0116k2vspw.h ...