[题解] LuoguP3768 简单的数学题
Description
给一个整数\(n\),让你求
\]
对一个大质数\(p\)取模。
保证\(n \le 10^{10},5\times 10^{8} \le p \le 1.1 \times 10^9\),\(p\)为质数
Solutions
先来推柿子好了,枚举\(\gcd\)的取值,有
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]\)
推柿子
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}\)。
所以
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\),有
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)=\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)=n^2\sum\limits_{d\mid n} \varphi(n)=n^3\),
愉快的套柿子
\]
用一点小学奥数的知识,我们知道\(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}\),所以
\]
后面的显然可以数论分块,于是处理\(f\)的前缀和的话杜教筛就好了。
再写一遍答案的柿子
\]
对\(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 简单的数学题的更多相关文章
- luoguP3768 简单的数学题
题目链接 luoguP3768 简单的数学题 题解 上面那个式子的最后一步,需要定理 用数学归纳法证明 \(S1=1^3=1^2\) \(S2=1^3+2^3=9=3^2=(1+2)^2\) \(S3 ...
- luoguP3768简单的数学题
大佬们绕道吧(或跳到错误&启发后下一根横线后) 这道题吧正解是莫比乌斯反演吧,但本人有一种独创玄妙的想法去偏分 这道题是让我们求这个对吧 \((\sum_{i=1}^n\sum_{j=1}^n ...
- 【Luogu3768】简单的数学题(莫比乌斯反演,杜教筛)
[Luogu3768]简单的数学题(莫比乌斯反演,杜教筛) 题面 洛谷 \[求\sum_{i=1}^n\sum_{j=1}^nijgcd(i,j)\] $ n<=10^9$ 题解 很明显的把\( ...
- 【LG3768】简单的数学题
[LG3768]简单的数学题 题面 求 \[ (\sum_{i=1}^n\sum_{j=1}^nij\text{gcd}(i,j))\text{mod}p \] 其中\(n\leq 10^{10},5 ...
- loj#6229 这是一道简单的数学题
\(\color{#0066ff}{ 题目描述 }\) 这是一道非常简单的数学题. 最近 LzyRapxLzyRapx 正在看 mathematics for computer science 这本书 ...
- 「洛谷P3768」简单的数学题 莫比乌斯反演+杜教筛
题目链接 简单的数学题 题目描述 输入一个整数n和一个整数p,你需要求出 \[\sum_{i=1}^n\sum_{j=1}^n (i\cdot j\cdot gcd(i,j))\ mod\ p\] ...
- LG3768 简单的数学题
P3768 简单的数学题 题目描述 输入一个整数n和一个整数p,你需要求出$(\sum_{i=1}^n\sum_{j=1}^n ijgcd(i,j))~mod~p$,其中gcd(a,b)表示a与b的最 ...
- 【数学】HPU--1037 一个简单的数学题
1037: 一个简单的数学题 [数学] 时间限制: 1 Sec 内存限制: 128 MB提交: 259 解决: 41 统计 题目描述 小明想要知道$a^b$的值,但是这个值会非常的大. 所以退而求其次 ...
- 洛谷 P3768 简单的数学题 解题报告
P3768 简单的数学题 题目描述 由于出题人懒得写背景了,题目还是简单一点好. 输入一个整数\(n\)和一个整数\(p,\)你需要求出\((\sum_{i=1}^n\sum_{j=1}^n ijgc ...
随机推荐
- 【PAT甲级】1006 Sign In and Sign Out (25 分)
题意: 给出学生人数M,输入M组学生ID,到机房的时间,离开机房的时间.输出最早到机房的学生的ID,空格,最后离开机房的学生的ID.(M大小未给出,就用了1e5) AAAAAccepted code: ...
- Lora笔记
Lora笔记 2016-03-26 [概述] LPWAN技术 无线跳频技术简介 https://bitbucket.org/ [节点] SX1278测试 SX1278测试 SX1276调试总结 LoR ...
- Java垃圾回收与内存
好久没看关于java的书了, 最近, 看了James Gosling的<<Java程序设计语言>>, 做了一些读书笔记. 这部分是关于垃圾回收的. 1.垃圾回收 对象是使用ne ...
- 如何让tomcat加载项目变快
修改配置: VM options填写内容: -Xms128m -Xmx256m -XX:PermSize=128m -XX:MaxPermSize=256m` 图示: ##1: ##2:
- Using webpack-dev-server
官方讲解地址:https://webpack.js.org/guides/development/#using-webpack-dev-server The webpack-dev-server pr ...
- 「BJOI2018」求和
「BJOI2018」求和 传送门 观察到 \(k\) 很小而且模数不会变,所以我们直接预处理 \(k\) 取所有值时树上前缀答案,查询的时候差分一下即可. 参考代码: #include <alg ...
- UniGUI之ServerModule常用设置(07)
主要有两个设置,它是一个单独的, 这意味着它只在每个应用程序中创建一次. 它主要用于配置各种服务器设置.不能将组件放在ServerModule上. 如前所述, ServerModule 是一个单一的, ...
- 利用kali自带的msfvenom工具生成远程控制软件(木马)
2.生成一个简单的木马 3. 4. 5. 6.接下来生成的winx64muma.exe实际演示 7.将生成的winx64muma.exe在受害者机器上运行 8.在kali下输入msfconsole 9 ...
- Xcode10升级问题:Multiple commands produce Info.plist
升级到Xcode10以后,编译过程遇到的第一个问题就是类似于这样的: Multiple commands produce '/Users/jiaxiaoyan/Library/Developer/Xc ...
- 洛谷 P1263 宫廷守卫
被这道题折腾了 \(2\) 个小时. 按照题意,每个守卫的上下左右四个方向上应当都是墙,而不能出现其他的守卫. 如图是一个合法的放置方案.每个守卫四个方向上都是墙(包括宫廷外墙). 如图是一个非法的放 ...