[题目链接] https://www.luogu.org/problemnew/show/P3768

[题目描述]

\(\sum_{i=1}^{n}\sum_{j=1}^{n}i* j* gcd(i,j)\mod\ p\)

[欧拉反演题解] https://www.luogu.org/blog/zhoutb2333/solution-p3768

  1. /*
  2. -----------------------
  3. 最大测试点,时限6s
  4. [Input]
  5. 1000000007 9786510294
  6. [Output]
  7. 27067954
  8. -----------------------2019.2.24
  9. */
  10. #include<bits/stdc++.h>
  11. #include<tr1/unordered_map>
  12. //#define int long long
  13. using namespace std;
  14. typedef long long LL;
  15. const int INF=1e9+7;
  16. inline LL read(){
  17. register LL x=0,f=1;register char c=getchar();
  18. while(c<48||c>57){if(c=='-')f=-1;c=getchar();}
  19. while(c>=48&&c<=57)x=(x<<3)+(x<<1)+(c&15),c=getchar();
  20. return f*x;
  21. }
  22. const int MAXN=5e6+5;
  23. int phi[MAXN],prime[MAXN];bool vis[MAXN];
  24. LL sphi[MAXN];
  25. LL n,mod,inv6,ans;
  26. unordered_map <LL,LL> Sphi;
  27. inline LL qpow(LL a,LL b){
  28. LL res=1;
  29. while(b){
  30. if(b&1) (res*=a)%=mod;
  31. (a*=a)%=mod;
  32. b>>=1;
  33. }
  34. return res;
  35. }
  36. inline void init(int n){
  37. phi[1]=1;
  38. for(int i=2;i<=n;i++){
  39. if(!vis[i]){
  40. prime[++prime[0]]=i;
  41. phi[i]=i-1;
  42. }
  43. int x;
  44. for(int j=1;j<=prime[0]&&(x=i*prime[j])<=n;j++){
  45. vis[x]=1;
  46. if(i%prime[j]==0){
  47. phi[x]=phi[i]*prime[j];
  48. break;
  49. }
  50. phi[x]=phi[i]*phi[prime[j]];
  51. }
  52. }
  53. for(int i=1;i<=n;i++){
  54. sphi[i]=(sphi[i-1]+1ll*phi[i]*i%mod*i%mod)%mod;
  55. }
  56. }
  57. inline LL s2(LL x){
  58. x%=mod;
  59. return x*(x+1)%mod*(2*x+1)%mod*inv6%mod;
  60. }
  61. inline LL s3(LL x){
  62. x%=mod;
  63. return ((x*(x+1)/2)%mod)*((x*(x+1)/2)%mod)%mod;
  64. }
  65. inline LL S_phi(LL n){
  66. if(n<MAXN) return sphi[n];
  67. if(Sphi[n]) return Sphi[n];
  68. LL res=s3(n);
  69. for(LL l=2,r;l<=n;l=r+1){
  70. r=n/(n/l);
  71. res=(res-(1ll*(s2(r)-s2(l-1)+mod)%mod*S_phi(n/l)%mod)+mod)%mod;
  72. }
  73. return Sphi[n]=res;
  74. }
  75. int main(){
  76. mod=read(),n=read();
  77. inv6=qpow(6,mod-2);
  78. init(MAXN-1);
  79. for(LL l=1,r;l<=n;l=r+1){
  80. r=n/(n/l);
  81. (ans+=1ll*(S_phi(r)-S_phi(l-1)+mod)%mod*s3(n/l)%mod)%=mod;
  82. }
  83. printf("%lld\n",ans);
  84. }

P3768 简单的数学题(莫比乌斯反演)的更多相关文章

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

    题意简述 求出这个式子 \[ \sum_{i=1}^n\sum_{j=1}^n ij(i,j) \bmod p \] 做法 先用莫比乌斯反演拆一下式子 \[ \begin{split} \sum_{i ...

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

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

  3. LOJ#6229. 这是一道简单的数学题(莫比乌斯反演+杜教筛)

    题目链接 \(Description\) 求\[\sum_{i=1}^n\sum_{j=1}^i\frac{lcm(i,j)}{gcd(i,j)}\] 答案对\(10^9+7\)取模. \(n< ...

  4. luogu 3768 简单的数学题 (莫比乌斯反演+杜教筛)

    题目大意:略 洛谷传送门 杜教筛入门题? 以下都是常规套路的变形,不再过多解释 $\sum\limits_{i=1}^{N}\sum\limits_{j=1}^{N}ijgcd(i,j)$ $\sum ...

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

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

  6. 【刷题】洛谷 P3768 简单的数学题

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

  7. 【Luogu】P3768简单的数学题(杜教筛)

    题目链接 emm标题全称应该叫“莫比乌斯反演求出可狄利克雷卷积的公式然后卷积之后搞杜教筛” 然后成功地困扰了我两天qwq 我们从最基本的题意开始,一步步往下推 首先题面给出的公式是$\sum\limi ...

  8. 洛谷 - P3768 - 简单的数学题 - 欧拉函数 - 莫比乌斯反演

    https://www.luogu.org/problemnew/show/P3768 \(F(n)=\sum\limits_{i=1}^{n}\sum\limits_{j=1}^{n}ijgcd(i ...

  9. 洛谷P3768 简单的数学题(莫比乌斯反演+狄利克雷卷积+杜教筛)

    传送门 不会…… 两篇加在一起都看不懂…… https://www.cnblogs.com/cellular-automaton/p/8241128.html https://www.luogu.or ...

随机推荐

  1. iframe自适应高度(转)

    iframe自适应高度 (2013-04-23 17:29:49) 标签: iframe 高度 自适应 js 杂谈 分类: 网页制作 有时候我们的网站需要引入其他网站的东西,比如评论,这时候就需要使用 ...

  2. Codeforces 57C (1-n递增方案数,组合数取模,lucas)

    这个题相当于求从1-n的递增方案数,为C(2*n-1,n); 取模要用lucas定理,附上代码: #include<bits/stdc++.h> using namespace std; ...

  3. koa1链接mongodb

    1.项目下安装mongodb和mongoose npm install mongodb --save-dev npm install mongoose --save-dev 2.router中 var ...

  4. Python_pip_01_pip的相关操作

    >Python中的pip是什么?能够做些什么? pip是Python中的一个进行包管理的东西,能够下载包.安装包.卸载包......一些列操作 >怎么查看pip的相关信息 在控制台输入: ...

  5. ROS Learning-013 beginner_Tutorials (编程) 编写ROS服务版的Hello World程序(Python版)

    ROS Indigo beginner_Tutorials-12 编写ROS服务版的Hello World程序(Python版) 我使用的虚拟机软件:VMware Workstation 11 使用的 ...

  6. 算法Sedgewick第四版-第1章基础-014一用stack把前置表达式转为后置表达式并计算值

    1. /************************************************************************* * Exercise 1.3.10 * * ...

  7. Java-马士兵设计模式学习笔记-工厂模式-简单工厂

    一.概述 1.目标:要控制任意类型交通工具的生产模式 2.目标有两层意思(1)任意类型 (2)生产模式,所以对应的,要这两个层面上抽象(Movable,VehicleFactory),利用接口,实现多 ...

  8. Linux kdb命令

    一.简介 Linux 内核调试器(KDB)允许您调试 Linux 内核.这个恰如其名的工具实质上是内核代码的补丁,它允许高手访问内核内存和数据结构.KDB 的主要优点之一就是它不需要用另一台机器进行调 ...

  9. Luogu 1357 花园

    发现$m$很小,直接状压起来,可以处理出一开始的合法的状态. 对于每一个合法的状态,可以处理出它的转移方向,即在后面填一个$1$或者填一个$0$,反着处理比较方便. 考虑一下环的情况,在这题中有一个小 ...

  10. Entity Framework Tutorial Basics(26):Add Entity Graph

    Add Entity Graph using DbContext: Adding entity graph with all new entities is a simple task. We can ...