题目传送门:51nod

  我们可以先观察一下这个$f(x)=\sum_{d|x}\mu(d) \cdot d$。

  首先它是个积性函数,并且$f(p^k)=1-p \ (k>0)$,这说明函数$f(x)$的值只与$x$的质因数集合有关,与每个质因数的次数无关,然后我们就容易发现$f(gcd(i,j)) \cdot f(lcm(i,j))=f(i) \cdot f(j)$。

  于是原式化为

$$ \begin{aligned} \sum_{i=1}^{n} \sum_{j=1}^{n} f(gcd(i,j)) \cdot f(lcm(i,j)) & =\sum_{i=1}^{n} \sum_{j=1}^{n} f(i) \cdot f(j) \\ & =(\sum_{i=1}^{n}f(i))^2 \\ \end{aligned} $$

  那么我们只需求出$f(x)$的前缀和。

  设$g(x)=x,h(x)=[x=1]$,容易证明$f \ast g=h$(这里$\ast$指狄利克雷卷积),那么我们可以用杜教筛求解。

#include<cstdio>
#include<cstring>
#include<cmath>
#include<cstdlib>
#include<algorithm>
#include<map>
#define ll long long
#define mod 1000000007
#define Mod1(x) (x>=mod?x-mod:x)
#define Mod2(x) (x<0?x+mod:x)
inline ll read()
{ll x=0; char c=getchar(),f=1;for(;c<'0'||'9'<c;c=getchar())if(c=='-')f=-1;for(;'0'<=c&&c<='9';c=getchar())x=x*10+c-'0';return x*f;
}
inline void write(ll x)
{static int buf[20],len; len=0;if(x<0)x=-x,putchar('-');for(;x;x/=10)buf[len++]=x%10;if(!len)putchar('0');else while(len)putchar(buf[--len]+'0');
}
inline void writeln(ll x){write(x); putchar('\n');}
inline void writesp(ll x){write(x); putchar(' ');}
const int limit=2000000,inv2=(mod+1)/2;
std::map<ll,ll>mp,mark;
int p[limit+10],mn[limit+10],f[limit+10],sum[limit+10];
ll n,tot;
void euler(int n)
{tot=0; f[1]=1;for(int i=2;i<=n;i++){if(!mn[i])p[++tot]=i,mn[i]=tot,f[i]=Mod2(1-i);for(int j=1;j<=mn[i]&&i*p[j]<=n;j++)mn[i*p[j]]=j,f[i*p[j]]=(j==mn[i]?f[i]:(ll)f[i]*f[p[j]]%mod);}sum[0]=0;for(int i=1;i<=n;i++)sum[i]=Mod1(sum[i-1]+f[i]);
}
ll solve(ll n)
{if(n<=limit)return sum[n];if(mark[n])return mp[n];ll sum=n;for(ll i=2,j;i<=n;i=j+1){j=n/(n/i);sum-=solve(n/i)*(((i+j)%mod)*((j-i+1)%mod)%mod*inv2%mod)%mod;sum=Mod2(sum);}mark[n]=1;return mp[n]=sum;
}
int main()
{n=read();euler(limit);mark.clear();mp.clear();ll ans=solve(n);writeln(ans*ans%mod);return 0;
}

51nod2026

转载于:https://www.cnblogs.com/quzhizhou/p/11488156.html

【51nod2026】Gcd and Lcm(杜教筛)相关推荐

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

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

  2. Luogu P6055 [RC-02] GCD(莫比乌斯反演,杜教筛)(这题乐死我了,真就图一乐呗)

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 Weblink https://www.luogu.com.cn/problem/P6055 Prob ...

  3. HDU 6607 Easy Math Problem(杜教筛 + min_25 + 拉格朗日插值)

    Easy Math Problem 推式子 ∑i=1n∑j=1ngcd(i,j)Klcm(i,j)[gcd(i,j)∈prime]∑i=1n∑j=1ngcd(i,j)K−1ij[gcd(i,j)∈pr ...

  4. #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 ...

  5. 51 NOD 1227 平均最小公倍数(杜教筛)

    1227 平均最小公倍数 推式子 S(n)=∑i=1n∑j=1ilcm(i,j)i=∑i=1n∑j=1iijigcd(i,j)=∑i=1n∑j=1ijgcd(i,j)=∑i=1n∑d=1i∑j=1ij ...

  6. [51 nod 1238] 最小公倍数之和 V3(杜教筛)

    1238 最小公倍数之和 V3 推式子 ∑i=1n∑j=1nlcm(i,j)=∑i=1n∑j=1nijgcd(i,j)=∑d=1n∑i=1n∑j=1nijd(gcd(i,j)==d)=∑d=1nd∑i ...

  7. 51nod1227-平均最小公倍数【杜教筛,欧拉函数】

    正题 题目链接:http://www.51nod.com/Challenge/Problem.html#problemId=1227 题目大意 定义 F(a)=∑i=1alcm(a,i)aF(a)=\ ...

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

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

  9. 51nod 1220 约数之和【莫比乌斯反演+杜教筛】

    首先由这样一个式子:\( d(ij)=\sum_{p|i}\sum_{q|j}[gcd(p,q)==1]\frac{pj}{q} \)大概感性证明一下吧我不会证 然后开始推: \[ \sum_{i=1 ...

最新文章

  1. Spring Boot 核心知识点总结,面试再也不怕了!
  2. 有关Android的调试时候常用到的一些技巧
  3. 某office前台任意文件上传漏洞分析
  4. 微擎小程序怎么配置服务器域名,随便撸源码源码微擎小程序通用配置图文教程,教会你怎么配置微擎小程序!...
  5. boost::python::pointee相关的测试程序
  6. ASP.NET中进行消息处理(MSMQ) 一
  7. 算力用多少买多少,竞享实例太香了
  8. flutter 真机无法调试 sdk报错_老许,你要转Flutter不要?只要你开金口,面试题现在就给你送来...
  9. 7.1 XHTML的规范化
  10. 什么是dispatchEvent?
  11. lodop php 快递单_Lodop打印模板 - 让Web打印易起来~~ – 基于ThinkPHP和Bootstrap的极速后台开发框架...
  12. 计算机 服装生产管理的变化,服装生产与管理服装生产管理概述.ppt
  13. 网页自适应手机屏幕的几种方法
  14. php的样式怎么设置字体大小,css中如何改变字体大小
  15. mysql eav_Magento的EAV模型窥探
  16. jpg转换为eps_在线JPG到EPS转换器
  17. w10计算机运行特别卡,Win10电脑运行卡死怎么办?Win10电脑卡死的解决方法
  18. fpga nvme 寄存器
  19. 色散介质中的脉冲展宽
  20. 【异常检测-论文阅读】(CVPR 2022)Self-Supervised Predictive Convolutional Attentive Block for Anomaly Detection

热门文章

  1. java junit Assert断言用法示例: Assert.assertEquals(期望的结果,运算的结果)
  2. Linux 网络及IP概述
  3. MySQL排序优化(两次排序和单次排序)
  4. MySQL列转行sql语句
  5. Spring声明式事务管理
  6. 富满电子鸿蒙系统,电子行业周报:HARMONYOS+2.0助力AIOT生态体系发展
  7. matlab simulink_运用MATLAB和Simulink开发自动驾驶控制系统
  8. 手机端展现table_百度信息流广告外包丨百度信息流广告的展现样式和收费方式?...
  9. python 保存本地乱码_请教大神,如何解决保存后的文件的乱码问题
  10. windows清理图标缓存并重新加载