洛谷 - 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 ...
随机推荐
- MySQL 启动报错:File ./mysql-bin.index not found (Errcode: 13)
Linux下安装初始化完MySQL数据库之后,使用mysqld_safe启动mysql数据库,如下发现,启动失败 [root@SVNServer bin]# ./mysqld_safe –user=m ...
- Hive调优实战
Hive是将符合SQL语法的字符串解析生成可以在Hadoop上执行的MapReduce的工具. 使用Hive尽量按照分布式计算的一些特点来设计sql,和传统关系型数据库有区别,所以需要去掉原有关系型数 ...
- 九度OJ 1143:Primary Arithmetic(初等数学) (进位)
时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:616 解决:254 题目描述: Children are taught to add multi-digit numbers from ri ...
- cocos2d-js v3事件管理器
总概: 1.时间监听器(cc.EventListener)封装用户的事件处理逻辑. 2.事件管理器(cc.eventManager)管理用户注册的事件监听器. 3.事件对象(cc.Event)包含事件 ...
- tornado之模板扩展
当我们有多个模板的时候,很多模板之间其实相似度很高.我们期望可以重用部分网页代码.这在tornado中可以通过extends语句来实现.为了扩展一个已经存在的模板,你只需要在新的模板文件的顶部放上一句 ...
- java使用ftp局域网内多线程上传图片过慢
多线程ftp上传文件时候,图片上传很慢,调试和查询资料发现主要在:storeFile方法 解决方案如下: FTPClient fc设置setBufferSize 可以根据内存大小适当设置大点的缓冲区: ...
- 最新版本号MYSQL官网下载地址可是必需要注冊后才干下载
因mysql5.0上运行函数不行,决定安装最新版本号的mysql,在网上找了些绿色版的.安装总报1067错误,网上的各种方法都试了,就是不行.浪费时间不说.郁闷死了,最后决定去官网,官 ...
- linux 网络设备,网卡配置 ,相关
网络设备,网卡配置: Eth0是物理网卡:唯一mac地址,Bcast:广播地址,MAsk:子网掩码, Lo:系统自带的回环的ip地址,可以做一些基本的测试应用,比如没有网卡就用127.0.0.1, r ...
- 遇到的一个Form表单自动提交问题解决办法
Form 表单中只有一个 input 元素时按回车会默认提交表单.有的时候我们希望按回车可以进行列表查询,但是查询后表单被自动提交了,然后刷新了整个页面.这个时候就需要对这个 Form 表单处理一下以 ...
- Code Review 规范
CodeReview规范 CodeReivew 标准 通用原则 提交 PR 的代码必须保证自测通过 只 review 代码规范.业务逻辑,不 review 架构设计(那是写代码前应该做的事情) 干掉重 ...