洛谷 - P3768 - 简单的数学题 - 欧拉函数 - 莫比乌斯反演
https://www.luogu.org/problemnew/show/P3768
\(F(n)=\sum\limits_{i=1}^{n}\sum\limits_{j=1}^{n}ijgcd(i,j)\)
首先加入方括号并枚举g,提gcd的g:
\(\sum\limits_{g=1}^{n}g\sum\limits_{i=1}^{n}\sum\limits_{j=1}^{n}ij[gcd(i,j)==g]\)
后面的方括号里的g也可以提出来,注意前面有两个id,所以:
\(\sum\limits_{g=1}^{n}g^3 \sum\limits_{i=1}^{\lfloor\frac{n}{g}\rfloor}\sum\limits_{j=1}^{\lfloor\frac{n}{g}\rfloor}ij[gcd(i,j)==1]\)
记 \(G(n)=\sum\limits_{i=1}^{n}\sum\limits_{j=1}^{n}ij[gcd(i,j)==1]\) ,则 \(F(n)=\sum\limits_{g=1}^{n}g^3 G(\lfloor\frac{n}{g}\rfloor)\) ,\(F(n)\)可以一次对\(G(\lfloor\frac{n}{g}\rfloor)\)分块求出来。
关注 \(G(n)\) 怎么求。
先把 \(G(n)\) 分成两半,设 \(H_1(n)=\sum\limits_{i=1}^{n}\sum\limits_{j=1}^{i}ij[gcd(i,j)==1]\) ,显然 \(G(n)=2*H_1(n)-1\)
又设\(H_2(n)=\sum\limits_{i=1}^{n}in[gcd(i,n)==1]\) ,则 $H_1(n)=\sum\limits_{i=1}^{n}H_2(i) $
而\(H_2(n)=n\sum\limits_{i=1}^{n}i[gcd(i,n)==1]\),这个不是在疯狂lcm里面见过吗?和一个数gcd为1的不比他大的数的和。
直接套上去:
\(H_2(n)=nH(n)=\frac{n^2}{2}([n==1]+\varphi(n))\)
所以:
\(H_1(n)=\sum\limits_{i=1}^{n}H_2(i) = \sum\limits_{i=1}^{n} \frac{i^2}{2}([i==1]+\varphi(i))\)
故:
\(G(n)=\sum\limits_{i=1}^{n} i^2 ([i==1]+\varphi(i)) -1= \sum\limits_{i=1}^{n} i^2 \varphi(i)\)
感觉可以用杜教筛来求,先线性筛出1e7以内的 \(G(n)\)。
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll n;
int mod;
int inv2;
const int MAXN=1e7;
int pri[MAXN+1];
int &pritop=pri[0];
int B[2*MAXN+1];
int pk[MAXN+1];
void sieve(int n=MAXN) {
memset(B,-1,sizeof(B));
B[0]=0;
pk[1]=1;
B[1]=1;
for(int i=2; i<=n; i++) {
if(!pri[i]) {
pri[++pritop]=i;
pk[i]=i;
ll tmp=1ll*i*i;
if(tmp>=mod)
tmp%=mod;
tmp*=(i-1);
if(tmp>=mod)
tmp%=mod;
B[i]=tmp;
}
for(int j=1; j<=pritop; j++) {
int &p=pri[j];
int t=i*p;
if(t>n)
break;
pri[t]=1;
if(i%p) {
pk[t]=p;
ll tmp=1ll*B[i]*B[p];
if(tmp>=mod)
tmp%=mod;
B[t]=tmp;
} else {
pk[t]=pk[i]*p;
if(pk[t]==t) {
ll tmp=1ll*t*t;
if(tmp>=mod)
tmp%=mod;
tmp*=(t-i);
if(tmp>=mod)
tmp%=mod;
B[t]=tmp;
} else {
ll tmp=1ll*B[t/pk[t]]*B[pk[t]];
if(tmp>=mod)
tmp%=mod;
B[t]=tmp;
}
break;
}
}
}
for(int i=1; i<=n; i++) {
ll tmp=(ll)B[i]+B[i-1];
if(tmp>=mod)
tmp-=mod;
B[i]=tmp;
}
}
inline ll qpow(ll x,ll n) {
if(x>=mod)
x%=mod;
ll res=1;
while(n) {
if(n&1) {
res*=x;
if(res>=mod)
res%=mod;
}
x*=x;
if(x>=mod)
x%=mod;
n>>=1;
}
return res;
}
int inv4;
int inv6;
inline int s2(ll n) {
if(n>=mod)
n%=mod;
ll tmp=n*(n+1);
if(tmp>=mod)
tmp%=mod;
tmp*=(n*2+1);
if(tmp>=mod)
tmp%=mod;
tmp*=inv6;
if(tmp>=mod)
tmp%=mod;
return tmp;
}
inline int s3(ll n) {
if(n>=mod)
n%=mod;
ll tmp=n*(n+1);
if(tmp>=mod)
tmp%=mod;
tmp*=tmp;
if(tmp>=mod)
tmp%=mod;
tmp*=inv4;
if(tmp>=mod)
tmp%=mod;
return tmp;
}
inline int id(ll x){
if(x<=MAXN)
return x;
else
return n/x+MAXN;
}
inline int S(ll n) {
int idn=id(n);
if(B[idn]!=-1)
return B[idn];
ll ret=s3(n);
for(ll l=2,r; l<=n; l=r+1) {
ll t=n/l;
r=n/t;
ll tmp=s2(r)-s2(l-1);
if(tmp<0)
tmp+=mod;
tmp*=S(t);
if(tmp>=mod)
tmp%=mod;
ret-=tmp;
}
ret%=mod;
if(ret<0)
ret+=mod;
return B[idn]=ret;
}
inline int F(ll n){
ll res=0;
for(ll l=1,r;l<=n;l=r+1){
ll t=n/l;
r=n/t;
ll tmp=s3(r)-s3(l-1);
if(tmp<0)
tmp+=mod;
tmp*=S(t);
if(tmp>=mod)
tmp%=mod;
res+=tmp;
}
if(res>=mod)
res%=mod;
return res;
}
int main() {
#ifdef Yinku
freopen("Yinku.in","r",stdin);
#endif // Yinku
scanf("%d%lld",&mod,&n);
inv2=qpow(2,mod-2);
inv4=qpow(4,mod-2);
inv6=qpow(6,mod-2);
sieve(min(n,(ll)MAXN));
printf("%d\n",F(n));
return 0;
}
洛谷 - P3768 - 简单的数学题 - 欧拉函数 - 莫比乌斯反演的更多相关文章
- 【刷题】洛谷 P3768 简单的数学题
题目描述 由于出题人懒得写背景了,题目还是简单一点好. 输入一个整数n和一个整数p,你需要求出(\(\sum_{i=1}^n\sum_{j=1}^n ijgcd(i,j))~mod~p\),其中gcd ...
- 洛谷 P3768 简单的数学题 解题报告
P3768 简单的数学题 题目描述 由于出题人懒得写背景了,题目还是简单一点好. 输入一个整数\(n\)和一个整数\(p,\)你需要求出\((\sum_{i=1}^n\sum_{j=1}^n ijgc ...
- 洛谷UVA12995 Farey Sequence(欧拉函数,线性筛)
洛谷题目传送门 分数其实就是一个幌子,实际上就是求互质数对的个数(除开一个特例\((1,1)\)).因为保证了\(a<b\),所以我们把要求的东西拆开看,不就是\(\sum_{i=2}^n\ph ...
- 洛谷P2568 GCD (欧拉函数/莫比乌斯反演)
P2568 GCD 题目描述 给定整数N,求1<=x,y<=N且Gcd(x,y)为素数的数对(x,y)有多少对. 输入输出格式 输入格式: 一个整数N 输出格式: 答案 输入输出样例 输入 ...
- 【luogu3768】简单的数学题 欧拉函数(欧拉反演)+杜教筛
题目描述 给出 $n$ 和 $p$ ,求 $(\sum\limits_{i=1}^n\sum\limits_{j=1}^nij\gcd(i,j))\mod p$ . $n\le 10^{10}$ . ...
- 洛谷P3601签到题(欧拉函数)
题目背景 这是一道签到题! 建议做题之前仔细阅读数据范围! 题目描述 我们定义一个函数:qiandao(x)为小于等于x的数中与x不互质的数的个数. 这题作为签到题,给出l和r,要求求. 输入输出格式 ...
- 洛谷$P1390$ 公约数的和 欧拉函数
正解:欧拉函数 解题报告: 传送门$QwQ$ 首先显然十分套路地变下形是趴 $\begin{align*}&=\sum_{i=1}^n\sum_{j=1}^n gcd(i,j)\\&= ...
- UVA11426 GCD - Extreme (II) (欧拉函数/莫比乌斯反演)
UVA11426 GCD - Extreme (II) 题目描述 PDF 输入输出格式 输入格式: 输出格式: 输入输出样例 输入样例#1: 10 100 200000 0 输出样例#1: 67 13 ...
- BZOJ 2818 GCD 【欧拉函数 || 莫比乌斯反演】
传送门:https://www.lydsy.com/JudgeOnline/problem.php?id=2818 2818: Gcd Time Limit: 10 Sec Memory Limit ...
随机推荐
- vue-router 介绍
vue-router是官方的路由管理工具,用于组建单页面应用很方便快捷.还记得我们在上一篇文章中,使用vue-cli创建的hello-vue的那个项目吗?打开项目,我们先看下目录结构: 看了上面的目录 ...
- Spring AOP和IOC(转载)
spring 的优点?1.降低了组件之间的耦合性 ,实现了软件各层之间的解耦 2.可以使用容易提供的众多服务,如事务管理,消息服务等 3.容器提供单例模式支持 4.容器提供了AOP技术,利用它很容易实 ...
- EasyPlayer Android安卓流媒体播放器实现播放同步录像功能实现(附源码)
本文转自EasyDarwin团队John的博客:http://blog.csdn.net/jyt0551,John是EasyPusher安卓直播推流.EasyPlayer直播流媒体播放端的开发和维护者 ...
- android开发基础知识了解
JDK下载:www.oracle.com; SDK下载:www.android.developer.com; eclipse下载:www.eclipse.org;
- Jquery跨域调用
今天在项目中须要做远程数据载入并渲染页面,直到开发阶段才意识到ajax跨域请求的问题,隐约记得Jquery有提过一个ajax跨域请求的解决方式,于是即刻翻出Jquery的API出来研究,发现JQuer ...
- Mac端博客发布工具推荐
引子 推荐一款好用的 Mac 端博客发布工具. 下载地址 echo 博客对接 这里以cnblog为例.接入类型为metawebblog,access point可以在cnblog的设置最下边找到,然后 ...
- Spring Boot缓存源码分析
前言 项目里面要增加一个应用缓存,原本想着要怎么怎么来整合ehcache和springboot,做好准备配置这个配置那个,结果只需要做三件事: pom依赖 写好一个ehcache的配置文件 在boot ...
- bzoj4474: [Jsoi2015]isomorphism
树hash啊 我的做法很垃圾,就是yy一种只有一个孩子时hash值和孩子一样的hash法 然后用重心去作为根遍历 这样有点问题,就是重心假如也是要删掉的那就gg了 那我们求tot的时候删掉的点就不管直 ...
- [转]FPGA入门——basys2开发板的伪随机gold码的生成
本文原创,转载请注明出处:http://www.cnblogs.com/risten/p/4166169.html 1.系统原理 通过频率控制字选择相位步进,产生访问ROM的地址,进而控制DAC的输出 ...
- hdu 1236 排名(排序)
题意:按成绩排序 思路:排序 #include<iostream> #include<stdio.h> #include<string.h> #include< ...