传送门

题意:给定p,Np,Np,N,求

∑i=1N∑j=1Nijgcd(i,j)modp\sum_{i=1}^{N}\sum_{j=1}^{N}ijgcd(i,j)\text{ }mod \text{ }pi=1∑N​j=1∑N​ijgcd(i,j) mod p

ppp为质数,在1e91e91e9左右

N≤1e10N \leq 1e10N≤1e10

神仙题

前置芝士:杜教筛

懒得重新写,所以顺便讲一下

杜教筛可以在非线性时间求积性函数的前缀和

设所求函数为f(n)f(n)f(n),S(n)为前缀和S(n)为前缀和S(n)为前缀和

S(n)=∑i=1nf(i)S(n)=\sum_{i=1}^{n}f(i)S(n)=i=1∑n​f(i)

构造一个可以快速计算前缀和的函数g(n)g(n)g(n),且和f(n)f(n)f(n)的狄利克雷卷积(f∗g)(n)(f*g)(n)(f∗g)(n)的前缀和可以快速求出

考虑

∑i=1n(f∗g)(i)\sum_{i=1}^{n}(f*g)(i)i=1∑n​(f∗g)(i)

暴力拆开

∑i=1n∑d∣if(d)g(id)\sum_{i=1}^{n}\sum_{d \mid i}f(d)g(\frac{i}{d})i=1∑n​d∣i∑​f(d)g(di​)

枚举ddd

∑d=1ng(d)∑d∣if(id)\sum_{d=1}^{n}g(d)\sum_{d \mid i}f(\frac{i}{d})d=1∑n​g(d)d∣i∑​f(di​)

∑d=1ng(d)S(⌊nd⌋)\sum_{d=1}^{n}g(d)S(\lfloor\frac{n}{d}\rfloor)d=1∑n​g(d)S(⌊dn​⌋)

我们要求的是S(n)S(n)S(n),所以可以求出g(1)S(n)g(1)S(n)g(1)S(n)

∑d=1ng(d)S(⌊nd⌋)−∑d=2ng(d)S(⌊nd⌋)\sum_{d=1}^{n}g(d)S(\lfloor\frac{n}{d}\rfloor)-\sum_{d=2}^{n}g(d)S(\lfloor\frac{n}{d}\rfloor)d=1∑n​g(d)S(⌊dn​⌋)−d=2∑n​g(d)S(⌊dn​⌋)

换成上面

∑i=1n(f∗g)(i)−∑d=2ng(d)S(⌊nd⌋)\sum_{i=1}^{n}(f*g)(i)-\sum_{d=2}^{n}g(d)S(\lfloor\frac{n}{d}\rfloor)i=1∑n​(f∗g)(i)−d=2∑n​g(d)S(⌊dn​⌋)

左边直接求,右边整除分块套递归

复杂度是O(N34)O(N^\frac{3}{4})O(N43​)

如果线性筛出N23N^\frac{2}{3}N32​以内的并用mapmapmap记忆化,可以达到O(N23)O(N^\frac{2}{3})O(N32​)

正文

∑i=1N∑j=1Nijgcd(i,j)\sum_{i=1}^{N}\sum_{j=1}^{N}ijgcd(i,j)i=1∑N​j=1∑N​ijgcd(i,j)

套路

∑d=1N∑i=1N∑j=1N[gcd(i,j)=d]ijd\sum_{d=1}^{N}\sum_{i=1}^{N}\sum_{j=1}^{N}[gcd(i,j)=d]ijdd=1∑N​i=1∑N​j=1∑N​[gcd(i,j)=d]ijd

∑d=1Nd∑i=1N∑j=1N[gcd(i,j)=d]ij\sum_{d=1}^{N}d\sum_{i=1}^{N}\sum_{j=1}^{N}[gcd(i,j)=d]ijd=1∑N​di=1∑N​j=1∑N​[gcd(i,j)=d]ij

右边可以反演

f(n)=∑i=1N∑j=1N[gcd(i,j)=n]ijf(n)=\sum_{i=1}^{N}\sum_{j=1}^{N}[gcd(i,j)=n]ijf(n)=i=1∑N​j=1∑N​[gcd(i,j)=n]ij

F(d)=∑d∣nf(n)=∑i=1N∑j=1N[d∣i][d∣j]ijF(d)=\sum_{d\mid n}f(n)=\sum_{i=1}^{N}\sum_{j=1}^{N}[d\mid i][d\mid j]ijF(d)=d∣n∑​f(n)=i=1∑N​j=1∑N​[d∣i][d∣j]ij

记sum(n)=n(n+1)2sum(n)=\frac{n(n+1)}{2}sum(n)=2n(n+1)​

F(d)=d2(sum⌊Nd⌋)2F(d)=d^2(sum\lfloor\frac{N}{d}\rfloor)^2F(d)=d2(sum⌊dN​⌋)2

f(d)=∑d∣nF(n)μ(nd)=∑d∣nn2(sum⌊Nn⌋)2μ(nd)f(d)=\sum_{d\mid n}F(n)\mu(\frac{n}{d})=\sum_{d\mid n}n^2(sum\lfloor\frac{N}{n}\rfloor)^2\mu(\frac{n}{d})f(d)=d∣n∑​F(n)μ(dn​)=d∣n∑​n2(sum⌊nN​⌋)2μ(dn​)

原来求的是

∑d=1Ndf(d)\sum_{d=1}^{N}df(d)d=1∑N​df(d)

∑d=1Nd∑d∣nn2(sum⌊Nn⌋)2μ(nd)\sum_{d=1}^{N}d\sum_{d\mid n}n^2(sum\lfloor\frac{N}{n}\rfloor)^2\mu(\frac{n}{d})d=1∑N​dd∣n∑​n2(sum⌊nN​⌋)2μ(dn​)

枚举nnn

∑n=1Nn2(sum⌊Nn⌋)2∑d∣ndμ(nd)\sum_{n=1}^{N}n^2(sum\lfloor\frac{N}{n}\rfloor)^2\sum_{d \mid n}d\mu(\frac{n}{d})n=1∑N​n2(sum⌊nN​⌋)2d∣n∑​dμ(dn​)

右边就是φ\varphiφ

∑n=1N(sum⌊Nn⌋)2n2φ(n)\sum_{n=1}^{N}(sum\lfloor\frac{N}{n}\rfloor)^2n^2\varphi(n)n=1∑N​(sum⌊nN​⌋)2n2φ(n)

左边是个整除分块,所以求出右边就可以了

#undef f

设f(n)=n2φ(n)f(n)=n^2\varphi(n)f(n)=n2φ(n)

显然这是个积性函数,考虑杜教筛

(f∗g)(n)=∑d∣ng(d)f(nd)=∑d∣ng(d)n2d2φ(nd)(f*g)(n)=\sum_{d \mid n}g(d)f(\frac{n}{d})=\sum_{d \mid n}g(d)\frac{n^2}{d^2}\varphi(\frac nd)(f∗g)(n)=d∣n∑​g(d)f(dn​)=d∣n∑​g(d)d2n2​φ(dn​)

令g(n)=n2g(n)=n^2g(n)=n2就可以消掉

(f∗g)(n)=∑d∣nn2φ(nd)=n2∑d∣nφ(d)=n3(f*g)(n)=\sum_{d \mid n}n^2\varphi(\frac nd)=n^2\sum_{d \mid n}\varphi(d)=n^3(f∗g)(n)=d∣n∑​n2φ(dn​)=n2d∣n∑​φ(d)=n3

众所周知

12+22+32+...+n2=(n)(n+1)(2n+1)61^2+2^2+3^2+...+n^2=\frac{(n)(n+1)(2n+1)}{6}12+22+32+...+n2=6(n)(n+1)(2n+1)​

13+23+33+...+n3=(1+2+3+...+n)21^3+2^3+3^3+...+n^3=(1+2+3+...+n)^213+23+33+...+n3=(1+2+3+...+n)2

两个前缀和都可以O(1)O(1)O(1)算出

这个问题就解决了

#include <iostream>
#include <cstdio>
#include <cstring>
#include <cctype>
#include <map>
#define MAXN 10000005
using namespace std;
typedef long long ll;
int MOD,inv2,inv6;
inline int add(const int& x,const int& y){return x+y>=MOD? x+y-MOD:x+y;}
inline int dec(const int& x,const int& y){return x-y<0? x-y+MOD:x-y;}
inline int mul(const int& x,const int& y){return (ll)x*y%MOD;}
inline int qpow(int a,int p)
{int ans=1;while (p){if (p&1) ans=mul(ans,a);a=mul(a,a);p>>=1;}return ans;
}
const int N=10000000;
int np[MAXN],pl[1000005],cnt;
int phi[MAXN],f_sum[MAXN];
void init()
{np[1]=phi[1]=1;for (int i=2;i<=N;++i){if (!np[i]) phi[pl[++cnt]=i]=i-1;int x;for (int j=1;(x=i*pl[j])<=N;++j){np[x]=1;if (i%pl[j]==0){phi[x]=mul(phi[i],pl[j]);break;}phi[x]=mul(phi[i],pl[j]-1);}}for (int i=1;i<=N;i++) f_sum[i]=add(f_sum[i-1],mul(phi[i],mul(i,i)));
}
inline int calc(const int& n){return mul(mul(n,n+1),inv2);}
inline int calc2(const int& n){return mul(mul(n,n+1),mul(2*n+1,inv6));}
inline int calc3(const int& n){int t=calc(n);return mul(t,t);}
map<int,int> m;
int getsum(ll n)
{if (n<=N) return f_sum[n];if (m[n]) return m[n];int ans=calc3(n%MOD);for (ll l=2,r;l<=n;l=r+1){r=n/(n/l);int tmp=getsum(n/l);ans=dec(ans,mul(dec(calc2(r%MOD),calc2((l-1)%MOD)),tmp));}return m[n]=ans;
}
//int gcd(int a,int b)
//{//  return b? gcd(b,a%b):a;
//}
int main()
{ll n;scanf("%d%lld",&MOD,&n);inv2=(MOD+1)>>1;inv6=qpow(6,MOD-2);init(); int ans=0;
//  for (int i=1;i<=n;i++)
//      for (int j=1;j<=n;j++)
//          ans=(ans+(ll)i*j%MOD*gcd(i,j))%MOD;
//  cerr<<ans<<'\n';
//  ans=0;for (ll l=1,r;l<=n;l=r+1){r=n/(n/l);ans=add(ans,mul(calc3((n/l)%MOD),dec(getsum(r),getsum(l-1))));}printf("%d\n",ans);return 0;
}

【洛谷3768】简单的数学题【莫比乌斯反演】【杜教筛】【小学奥数】相关推荐

  1. #6229. 这是一道简单的数学题(反演 + 杜教筛)

    #6229. 这是一道简单的数学题 推式子 ∑i=1n∑j=1ilcm(i,j)gcd(i,j)=(∑i=1n∑j=1nlcm(i,j)gcd(i,j)+n)∗inv2所以重点求∑i=1n∑j=1nl ...

  2. [复习]莫比乌斯反演,杜教筛,min_25筛

    [复习]莫比乌斯反演,杜教筛,min_25筛 莫比乌斯反演 做题的时候的常用形式: \[\begin{aligned}g(n)&=\sum_{n|d}f(d)\\f(n)&=\sum_ ...

  3. 【bzoj4176】Lucas的数论 莫比乌斯反演+杜教筛

    题目描述 去年的Lucas非常喜欢数论题,但是一年以后的Lucas却不那么喜欢了. 在整理以前的试题时,发现了这样一道题目"求Sigma(f(i)),其中1<=i<=N" ...

  4. P3768 简单的数学题 [狄利克雷卷积,杜教筛,莫比乌斯反演]

    简单的数学题 题目连接 https://www.luogu.org/problemnew/show/P3768 题目描述 输入一个正整数n,n≤1010n,n\le 10^{10}n,n≤1010和p ...

  5. matlab狄利克雷函数,数论入门1——莫比乌斯函数,欧拉函数,狄利克雷卷积,线性筛,莫比乌斯反演,杜教筛...

    数论入门1 一个菜鸡对数论的一点点理解... 莫比乌斯函数 定义函数$\mu(n)$为: 当n有平方因子时,$\mu(n)=0$. 当n没有平方因子时,$\mu(n)=(-1)^{\omega(n)} ...

  6. 【LOJ#572】Misaka Network 与求和(莫比乌斯反演/杜教筛/min_25筛)

    [LOJ#572]Misaka Network 与求和 https://www.cnblogs.com/cjyyb/p/10170630.html 看到次大质因子就可以想到是min_25筛了,然后只需 ...

  7. 牛客练习赛84F-牛客推荐系统开发之下班【莫比乌斯反演,杜教筛】

    正题 题目链接:https://ac.nowcoder.com/acm/contest/11174/F 题目大意 给出n,kn,kn,k求 ∑i1=1n∑i2=1n...∑ik=1ngcd(fi1,f ...

  8. 牛客P19836 裴蜀定理+莫比乌斯反演+杜教筛

    题意: 一开始一个人在原点,它拥有 n n n个整数 x i x_{i} xi​,并且 x i ∈ [ 1 , m ] x_{i}\in[1,m] xi​∈[1,m],他每次可以选择一个 x i x_ ...

  9. CCPC-Wannafly Winter Camp Day3 (Div2, onsite) F 小清新数论 欧拉函数的利用 莫比乌斯反演 杜教筛

    F - 小清新数论 做法一:欧拉函数 #include<stdio.h> #include<bits/stdc++.h> using namespace std; #defin ...

  10. P4450-双亲数,P5221-Product,P6055-[RC-02]GCD【莫比乌斯反演,杜教筛】

    除了最后一题都比较简单就写一起了 P4450-双亲数 题目链接:https://www.luogu.com.cn/problem/P4450 题目大意 给出A,B,dA,B,dA,B,d求有多少对(a ...

最新文章

  1. 2000条你应知的WPF小姿势 基础篇45-50 Visual TreeLogic Tree 附带两个小工具
  2. matlab的NLP功能,pyhanlp 共性分析与短语提取内容详解
  3. EJBCA使用之注册用户及创建证书
  4. Unity手游开发札记——移动平台的天气系统实现
  5. 20应用统计考研复试要点(part38)--概率论与数理统计
  6. uniapp使用iconfont字体图标
  7. C# 序列化技术详解《转》
  8. SolrCloud Hello Word
  9. JavaScript-传值(引用类型,基本类型)
  10. PlaySound 播放内存中的音频数据
  11. Imagenet与ILSVRC数据集介绍
  12. 令人不寒而栗的黄蓉(转)
  13. 6-7-Isomorphic-函数题
  14. 聊聊 C++ 中的四种类型转换符
  15. echarts图表y轴数据设置为固定值,等间距,如何自定义echarts图表y轴数据
  16. OaisimWithS1搭建笔记(2019.5)
  17. 如何给导师发邮件?【附带邮件模板】
  18. tf.compat.v1的含义
  19. ubuntu18.04 install 安装postgresql9.6 解决重音不敏感”排序规则,以及扩展pgcrypto函数
  20. 关于 ChatGPT 必看的 10 篇论文

热门文章

  1. 励志!送女儿去厦大读研后,爸爸回家就考了厦大的博士,现在是女儿的“学弟”...
  2. 50张图,带你认识大学各专业
  3. 一只蝙蝠的自述在朋友圈火了:千万不要再吃野味了!
  4. 炸锅了!Google称2029年人类开始实现永生不死!疾病,衰老,痛苦将彻底消失!?
  5. HTML手机上图片显示被压扁,在重新调整Web浏览器HTML |时,文本会被压扁CSS
  6. python turtle 绘图_谈一下Pycharm中关联系统Python解释器的方法
  7. androidstudio学习总结_Android 开发工程师自述:2年的开发,我总结了7条经验
  8. 华为二面!!!被问常用API,这也太偏门了吧,我秀了一波hhhh~
  9. 23V3有这种C语言表达式吗,数据结构(C语言版第2版_李云清)习题答案2012-12.doc
  10. 服务器运行慢都有哪些问题,服务器数据库的运行速度很慢问题