用mu写lcm那道卡常卡成狗(然而最后也没卡过去,于是写一下gcd冷静一下

首先推一下式子

\[\sum_{i=1}^{n}\sum_{j=1}^{n}gcd(i,j)
\]

\[\sum_{i=1}^{n}\sum_{j=1}^{n}\sum_{d=1}^{n}[gcd(i,j)==d]d
\]

\[\sum_{d=1}^{n}d\sum_{i=1}^{n}\sum_{j=1}^{n}[gcd(i,j)==d]
\]

\[\sum_{d=1}^{n}d\sum_{i=1}^{\left \lfloor \frac{n}{d} \right \rfloor}\sum_{j=1}^{\left \lfloor \frac{n}{d} \right \rfloor}[gcd(i,j)==1]
\]

然后可以向两个方向推:莫比乌斯或者欧拉

首先推欧拉函数的:

为什么转成乘二加一的形式?考虑矩阵。\( \sum_{i=1}{n}\sum_{j=1}{n}[gcd(i,j)1] \)的形式相当于把除了\( ij \)的数对\( (i,j) \)都算了两遍,所以乘二,这时只用算一遍的\( ij \)的数对也被算了两遍,这些数对中对答案有贡献的只有\( gcd(1,1)1 \)所以减去一

\[\sum_{d=1}^{n}d(2*\sum_{i=1}^{\left \lfloor \frac{n}{d} \right \rfloor}\phi(i)-1)
\]

\[2*\sum_{d=1}^{n}d\sum_{i=1}^{\left \lfloor \frac{n}{d} \right \rfloor}\phi(i)-\sum_{i=1}^{n}i
\]

转成这种形式就可以分块+杜教筛做了

拒绝算时间复杂度(。

然后莫比乌斯反演(不想卡常所以没写代码,最后应该带个ln:

\[\sum_{d=1}^{n}d\sum_{i=1}^{\left \lfloor \frac{n}{d} \right \rfloor}\sum_{j=1}^{\left \lfloor \frac{n}{d} \right \rfloor}\sum_{k|gcd(i,j)}\mu(k)
\]

\[\sum_{d=1}^{n}d\sum_{k=1}^{\left \lfloor \frac{n}{d} \right \rfloor}\mu(k)\left \lfloor \frac{n}{dk} \right \rfloor^2
\]

欧拉函数的代码,因为时间很充足,所以为了方便全部用了long long

  1. #include<iostream>
  2. #include<cstdio>
  3. using namespace std;
  4. const long long N=1000005,m=1000000,mod=1e9+7,inv2=500000004;
  5. long long n,ans,q[N],tot,phi[N],ha[N];
  6. bool v[N];
  7. long long wk(long long x)
  8. {
  9. if(x>=mod)
  10. x-=mod;
  11. return x%mod*(x+1)%mod*inv2%mod;
  12. }
  13. long long slv(long long x)
  14. {
  15. if(x<=m)
  16. return phi[x];
  17. if(ha[n/x])
  18. return ha[n/x];
  19. long long re=wk(x);
  20. for(long long i=2,la;i<=x;i=la+1)
  21. {
  22. la=x/(x/i);
  23. re=(re-(la-i+1)%mod*slv(x/i)%mod)%mod;
  24. }
  25. return ha[n/x]=re;
  26. }
  27. int main()
  28. {
  29. phi[1]=1;
  30. for(long long i=2;i<=m;i++)
  31. {
  32. if(!v[i])
  33. {
  34. q[++tot]=i;
  35. phi[i]=i-1;
  36. }
  37. for(long long j=1;j<=tot&&q[j]%mod*i<=m;j++)
  38. {
  39. long long k=i%mod*q[j];
  40. v[k]=1;
  41. if(i%q[j]==0)
  42. {
  43. phi[k]=phi[i]%mod*q[j];
  44. break;
  45. }
  46. phi[k]=phi[i]%mod*(q[j]-1);
  47. }
  48. }
  49. for(long long i=1;i<=m;i++)
  50. phi[i]=(phi[i]+phi[i-1])%mod;
  51. scanf("%lld",&n);
  52. for(long long i=1,la;i<=n;i=la+1)
  53. {
  54. la=n/(n/i);
  55. ans=(ans+(wk(la)-wk(i-1))%mod*slv(n/i)%mod)%mod;
  56. }
  57. printf("%lld\n",((ans%mod*2-wk(n))%mod+mod)%mod);
  58. return 0;
  59. }

51nod 1237 最大公约数之和 V3【欧拉函数||莫比乌斯反演+杜教筛】的更多相关文章

  1. 51nod 1040 最大公约数之和(欧拉函数)

    1040 最大公约数之和 题目来源: rihkddd 基准时间限制:1 秒 空间限制:131072 KB 分值: 80 难度:5级算法题   给出一个n,求1-n这n个数,同n的最大公约数的和.比如: ...

  2. 【BZOJ4805】欧拉函数求和(杜教筛)

    [BZOJ4805]欧拉函数求和(杜教筛) 题面 BZOJ 题解 好久没写过了 正好看见了顺手切一下 令\[S(n)=\sum_{i=1}^n\varphi(i)\] 设存在的某个积性函数\(g(x) ...

  3. 51nod1040 最大公约数之和,欧拉函数或积性函数

    1040 最大公约数之和 给出一个n,求1-n这n个数,同n的最大公约数的和.比如:n = 6时,1,2,3,4,5,6 同6的最大公约数分别为1,2,3,2,1,6,加在一起 = 15 看起来很简单 ...

  4. 51NOD 1237 最大公约数之和 V3 [杜教筛]

    1237 最大公约数之和 V3 题意:求\(\sum_{i=1}^n\sum_{j=1}^n(i,j)\) 令\(A(n)=\sum_{i=1}^n(n,i) = \sum_{d\mid n}d \c ...

  5. 51nod 1237 最大公约数之和 V3(杜教筛)

    [题目链接] https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1237 [题目大意] 求[1,n][1,n]最大公约数之和 ...

  6. 51nod 1237 最大公约数之和 V3

    求∑1<=i<=n∑1<=j<=ngcd(i,j) % P P = 10^9 + 7 2 <= n <= 10^10 这道题,明显就是杜教筛 推一下公式: 利用∑d ...

  7. 51nod 1040最大公约数和(欧拉函数)

    1040 最大公约数之和 题目来源: rihkddd 基准时间限制:1 秒 空间限制:131072 KB 分值: 80 难度:5级算法题  收藏  关注 给出一个n,求1-n这n个数,同n的最大公约数 ...

  8. 51nod 1040 最大公约数的和 欧拉函数

    1040 最大公约数之和 题目来源: rihkddd 基准时间限制:1 秒 空间限制:131072 KB 分值: 80 难度:5级算法题  收藏  关注 给出一个n,求1-n这n个数,同n的最大公约数 ...

  9. 【51Nod 1363】最小公倍数之和(欧拉函数)

    题面 传送门 题解 拿到式子的第一步就是推倒 \[ \begin{align} \sum_{i=1}^nlcm(n,i) &=\sum_{i=1}^n\frac{in}{\gcd(i,n)}\ ...

随机推荐

  1. 从零开始写STL—模板元编程之tuple

    tuple Class template std::tuple is a fixed-size collection of heterogeneous values. It is a generali ...

  2. hdu——3861 The King’s Problem

    The King’s Problem Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Other ...

  3. 转 Linux里设置环境变量的方法(export PATH)

    1.动态库路径的设置 Linux下调用动态库和windows不一样.linux 可执行程序是靠配置文件去读取路径的,因此有些时候需要设置路径 具体操作如下export LD_LIBRARY_PATH= ...

  4. CodeForces - 344D Alternating Current (模拟题)

    id=46667" style="color:blue; text-decoration:none">CodeForces - 344D id=46667" ...

  5. Linux Shell 条件测试

    1. 文件测试 -d 目录 -s 文件非空 -f 是正规文件 -w 有写权限 -r 有读权限 -x 有执行权限 -L 符号连接 -u 文件有suid位设置

  6. anaconda中新rdkit安装

    1. 执行 conda create -c rdkit -n my-rdkit-env rdkit 该步骤经测试发现需FQ,而模拟器无法完成FQ(至少我不知道方法), 因此在本机上配置好环境后复制粘贴 ...

  7. iOS 开发者中的个人账号与组织账号之间区别

    苹果对开发者主要分为3类:个人.组织(公司.企业).教育机构.即: 1.个人(Individual) 2.组织(Organizations) 组织类又分为2个小类: (1)公司(Company) (2 ...

  8. eclispe pydev tab改回 空格找到方法了,这个链接:http://stackoverflow.com/questions/23570925/eclipse-indents-new-line-with-tabs-instead-of-spaces

    看这个链接: 3down votefavorite 1 I've followed all the suggestions here. When I press return, I get a new ...

  9. iptraf 网卡 ip 端口 监控 netstat 关闭端口方法

    18 commands to monitor network bandwidth on Linux server – BinaryTides https://www.binarytides.com/l ...

  10. Cron Expression

    CronTrigger CronTriggers往往比SimpleTrigger更有用,如果您需要基于日历的概念,而非SimpleTrigger完全指定的时间间隔,复发的发射工作的时间表.CronTr ...