题目

已知 \(f(x)=\sum_{d|x}μ(d)∗d\)

现在请求出下面式子的值

\(\sum_{i=1}^{n}\sum_{j=1}^{n}f(gcd(i,j))∗f(lcm(i,j))\)

由于值可能过大所以请对 10^9+7 取模

\(n≤10^9\)

分析

\(f\)为积性函数,

因为\(lcm(i,j)\)、\(gcd(i,j)\)的任意一个质因子的指数和\(i\)、\(j\)其中一个的相同。

对于每个质因子分开考虑, \(f(gcd(i,j))f(lcm(i,j))=f(i)f(j)\)

\[ans=\sum_{i=1}^{n}\sum_{j=1}^{n}f(i)f(j)
\]

\[=(\sum_{i=1}^{n}f(i))^2
\]

现在考虑如何求\(\sum_{i=1}^{n}f(i)\)

\[=\sum_{i=1}^{n}\sum_{d|i}μ(d)∗d
\]

\[=\sum_{i=1}^{n}\sum_{d=1}^{\lfloor \frac{n}{i} \rfloor}μ(d)∗d
\]

\[=\sum_{d=1}^{n}μ(d)∗d\lfloor \frac{n}{d} \rfloor
\]

设\(F(d)=μ(d)∗d,S(n)=\sum_{i=1}^{n}F(i)\)

发现\(F*id=e\)(因为\(\sum_{d|n}μ(d)∗d*\lfloor \dfrac{n}{d} \rfloor\)=[n=1])

于是

\[1=\sum_{i=1}^{n}\sum_{d|i}μ(d)∗d*\lfloor \dfrac{i}{d} \rfloor
\]

设\(T=\lfloor \dfrac{i}{d} \rfloor\)

\[=\sum_{T=1}^{n}T\sum_{d|T}μ(d)∗d
\]

\[=\sum_{T=1}^{n}T\sum_{d=1}^{\lfloor \frac{n}{T} \rfloor}μ(d)∗d
\]

\[=\sum_{T=1}^{n}TS(\lfloor \frac{n}{T} \rfloor)
\]

于是

\[S(n)=1-\sum_{T=2}^{n}TS(\lfloor \frac{n}{T} \rfloor)
\]

杜教筛一下.

\(ans=S(n)^2\)

  1. #include <cmath>
  2. #include <iostream>
  3. #include <cstdio>
  4. #include <cstdlib>
  5. #include <cstring>
  6. #include <algorithm>
  7. #include <queue>
  8. #include <map>
  9. const int maxlongint=2147483647;
  10. const long long mo=1e9+7;
  11. const int lim=1e5+7;
  12. const int N=10000005;
  13. using namespace std;
  14. #define sqr(x) (1ll*(x)*(x)%mo)
  15. #define val(x,y) (1ll*(y-x+1)*(x+y)/2%mo)
  16. int p[N],mu[N],n,ha[lim+5][2],s[N],ans;
  17. bool bz[N];
  18. int get(int v)
  19. {
  20. int x;
  21. for(x=v%lim;ha[x][0] && ha[x][0]!=v;(++x)-=x>=lim?lim:0);
  22. return x;
  23. }
  24. int S(int m)
  25. {
  26. if(m<=N-5) return s[m];
  27. int pos=get(m);
  28. if(ha[pos][0]) return ha[pos][1];
  29. ha[pos][0]=m;
  30. int la=0,sum=0;
  31. for(int i=2;i<=m;i=la+1)
  32. {
  33. la=m/(m/i);
  34. sum=(1ll*sum+1ll*val(i,la)*S(m/i))%mo;
  35. }
  36. return ha[pos][1]=(1-sum+mo)%mo;
  37. }
  38. int main()
  39. {
  40. freopen("2026.in","r",stdin);
  41. //freopen("2026.out","w",stdout);
  42. scanf("%d",&n);
  43. mu[1]=s[1]=1;
  44. for(int i=2;i<=N-5;i++)
  45. {
  46. if(!bz[i]) mu[p[++p[0]]=i]=-1;
  47. s[i]=(s[i-1]+mu[i]*i+mo)%mo;
  48. for(int j=1,k;j<=p[0] && (k=i*p[j])<=N-5;j++)
  49. {
  50. bz[k]=true;
  51. if(i%p[j]==0) break;
  52. mu[k]=-mu[i];
  53. }
  54. }
  55. int la=1;
  56. for(int i=1;i<=n;i=la+1)
  57. {
  58. la=n/(n/i);
  59. ans=(1ll*ans+1ll*(S(la)-S(i-1)+mo)*(n/i))%mo;
  60. }
  61. printf("%lld",sqr(ans));
  62. }

【51nod 2026】Gcd and Lcm的更多相关文章

  1. 【Aizu - 0005 】GCD and LCM

    GCD and LCM Descriptions: Write a program which computes the greatest common divisor (GCD) and the l ...

  2. 51NOD 2026:Gcd and Lcm——题解

    http://www.51nod.com/onlineJudge/questionCode.html#!problemId=2026 参考及推导:https://www.cnblogs.com/ivo ...

  3. 【51NOD 1847】奇怪的数学题(莫比乌斯反演,杜教筛,min_25筛,第二类斯特林数)

    [51NOD 1847]奇怪的数学题(莫比乌斯反演,杜教筛,min_25筛,第二类斯特林数) 题面 51NOD \[\sum_{i=1}^n\sum_{j=1}^nsgcd(i,j)^k\] 其中\( ...

  4. 【51Nod 1769】Clarke and math2

    [51Nod 1769]Clarke and math2 题面 51Nod 题解 对于一个数论函数\(f\),\(\sum_{d|n}f(d)=(f\times 1)(n)\). 其实题目就是要求\( ...

  5. 【CF#338D】GCD Table

    [题目描述] 有一张N,M<=10^12的表格,i行j列的元素是gcd(i,j) 读入一个长度不超过10^4,元素不超过10^12的序列a[1..k],问是否在某一行中出现过 [题解] 要保证g ...

  6. 【BZOJ 2818】 GCD

    [题目链接] 点击打开链接 [算法] 线性筛出不大于N的所有素数,枚举gcd(x,y)(设为p),问题转化为求(x,y)=p的个数          设x=x'p, y=y'p,那么有(x,y)=1且 ...

  7. 【Codeforces 582A】 GCD Table

    [题目链接] 点击打开链接 [算法] G中最大的数一定也是a中最大的数.          G中次大的数一定也是a中次大的数. 第三.第四可能是由最大和次大的gcd产生的 那么就不难想到下面的算法: ...

  8. 【HDU 5382】 GCD?LCM! (数论、积性函数)

    GCD?LCM! Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others)Total ...

  9. 【51nod2026】Gcd and Lcm(杜教筛)

    题目传送门:51nod 我们可以先观察一下这个$f(x)=\sum_{d|x}\mu(d) \cdot d$. 首先它是个积性函数,并且$f(p^k)=1-p \ (k>0)$,这说明函数$f( ...

随机推荐

  1. Ciso三层交换 上vlan间互通, 端口映射到vlan

    路由器2911配置: !hostname router interface GigabitEthernet0/0 ip address 10.0.0.2 255.0.0.0 ip nat outsid ...

  2. 【Linux开发】linux设备驱动归纳总结(三):5.阻塞型IO实现

    linux设备驱动归纳总结(三):5.阻塞型IO实现 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx ...

  3. sqlalchemy orm 层面删除数据注意

    #encoding: utf-8 from sqlalchemy import create_engine,Column,Integer,String,Float,func,and_,or_,Text ...

  4. 云风协程库coroutine源码分析

    前言 前段时间研读云风的coroutine库,为了加深印象,做个简单的笔记.不愧是大神,云风只用200行的C代码就实现了一个最简单的协程,代码风格精简,非常适合用来理解协程和用来提升编码能力. 协程简 ...

  5. 西安邀请赛-E(树链剖分+线段树)

    题目链接:https://nanti.jisuanke.com/t/39272 题意:给一棵树,n个结点,树根为1,n-1条边,每个结点有一个权值.进行3种操作: 1 s t:把1和s之间的最短路径上 ...

  6. linux centos7.3安装lnmp,nginx-1.11.12 ,php7.0.2 ,

    #更新源 yum -y update #添加用户和组 adduser www groupadd www usermod -G www www #初始化目录 mkdir -p /data/app/php ...

  7. poj 4005 Moles

    大意: 给定$n$元素序列$a$, 依次插入二叉搜索树, 求出$dfs$序列, 对序列每个元素模$2$得到一个长为$2n-1$的$01$序列$s1$. 再给定$01$序列$s2$, 求$s2$在$s1 ...

  8. 一款完美代替微信小程序原生客服消息的工具:

    一.设置:无需开发,多种回复(自动+人工)   自动回复形式有3种: 打开客服消息(用户只要和客服互动过一次,再次点击进入,会收到设置好的自动回复) 关键词回复(用户在小程序中回复某个关键词内容时,会 ...

  9. 用java语言(文件和文件流知识点)实现图片的拷贝,从d盘拷贝到e盘

    /** * 实现图片的拷贝\ * 注意:用的是文件字节流 */ package com.test4; import java.io.*; public class Demo12_4 { /** * @ ...

  10. springboot 集成 swagger 自动生成API文档

    Swagger是一个规范和完整的框架,用于生成.描述.调用和可视化RESTful风格的Web服务.简单来说,Swagger是一个功能强大的接口管理工具,并且提供了多种编程语言的前后端分离解决方案. S ...