题目传送门: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=; char c=getchar(),f=;
for(;c<''||''<c;c=getchar())if(c=='-')f=-;
for(;''<=c&&c<='';c=getchar())x=x*+c-'';
return x*f;
}
inline void write(ll x)
{
static int buf[],len; len=;
if(x<)x=-x,putchar('-');
for(;x;x/=)buf[len++]=x%;
if(!len)putchar('');
else while(len)putchar(buf[--len]+'');
}
inline void writeln(ll x){write(x); putchar('\n');}
inline void writesp(ll x){write(x); putchar(' ');}
const int limit=,inv2=(mod+)/;
std::map<ll,ll>mp,mark;
int p[limit+],mn[limit+],f[limit+],sum[limit+];
ll n,tot;
void euler(int n)
{
tot=; f[]=;
for(int i=;i<=n;i++){
if(!mn[i])p[++tot]=i,mn[i]=tot,f[i]=Mod2(-i);
for(int j=;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[]=;
for(int i=;i<=n;i++)
sum[i]=Mod1(sum[i-]+f[i]);
}
ll solve(ll n)
{
if(n<=limit)return sum[n];
if(mark[n])return mp[n];
ll sum=n;
for(ll i=,j;i<=n;i=j+){
j=n/(n/i);
sum-=solve(n/i)*(((i+j)%mod)*((j-i+)%mod)%mod*inv2%mod)%mod;
sum=Mod2(sum);
}
mark[n]=;
return mp[n]=sum;
}
int main()
{
n=read();
euler(limit);
mark.clear();
mp.clear();
ll ans=solve(n);
writeln(ans*ans%mod);
return ;
}

51nod2026

【51nod2026】Gcd and Lcm(杜教筛)的更多相关文章

  1. LOJ 6229 LCM / GCD (杜教筛+Moebius)

    链接: https://loj.ac/problem/6229 题意: \[F(n)=\sum_{i=1}^n\sum_{j=1}^i\frac{\mathrm{lcm}(i,j)}{\mathrm{ ...

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

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

  3. LOJ6686 Stupid GCD(数论,欧拉函数,杜教筛)

    做题重心转移到 LOJ 了. 至于为什么,如果你知道“……”的密码,就去看吧. LOJ 上用户自创题大多数都不可做,今天看到个可做题(而且还是个水题),就来做了一发. 明显枚举立方根.(以下令 $m= ...

  4. P6070 [RC-02] GCD [杜教筛,莫比乌斯反演]

    没啥好说的,杜教筛板子题. \[\sum_{i=1}^{N} \sum_{j=1}^{N}\sum_{p=1}^{\lfloor \frac{N}{j} \rfloor}\sum_{q=1}^{\lf ...

  5. 51NOD 1222 最小公倍数计数 [莫比乌斯反演 杜教筛]

    1222 最小公倍数计数 题意:求有多少数对\((a,b):a<b\)满足\(lcm(a,b) \in [1, n]\) \(n \le 10^{11}\) 卡内存! 枚举\(gcd, \fra ...

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

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

  7. 51nod1238 最小公倍数之和 V3 莫比乌斯函数 杜教筛

    题意:求\(\sum_{i = 1}^{n}\sum_{j = 1}^{n}lcm(i, j)\). 题解:虽然网上很多题解说用mu卡不过去,,,不过试了一下貌似时间还挺充足的,..也许有时间用phi ...

  8. 【51nod】1238 最小公倍数之和 V3 杜教筛

    [题意]给定n,求Σi=1~nΣj=1~n lcm(i,j),n<=10^10. [算法]杜教筛 [题解]就因为写了这个非常规写法,我折腾了3天…… $$ans=\sum_{i=1}^{n}\s ...

  9. [基本操作] Mobius 反演, Dirichlet 卷积和杜教筛

    Dirichlet 卷积是两个定义域在正整数上的函数的如下运算,符号为 $*$ $(f * g)(n) = \sum_{d|n}f(d)g(\frac{n}{d})$ 如果不强调 $n$ 可简写为 $ ...

随机推荐

  1. sklearn常见分类器(二分类模板)

    # -*- coding: utf-8 -*- import pandas as pd import matplotlib matplotlib.rcParams['font.sans-serif'] ...

  2. git_push报错

    转自 https://blog.csdn.net/u010042585/article/details/79378726 将本地项目push到GitHub时遇到的问题 .$ git remote ad ...

  3. Spring Aop(十三)——ProxyFactoryBean创建代理对象

    转发地址:https://www.iteye.com/blog/elim-2398673 ProxyFactoryBean创建代理对象 ProxyFactoryBean实现了Spring的Factor ...

  4. 【ARTS】01_28_左耳听风-201900520~201900526

    ARTS: Algrothm: leetcode算法题目 Review: 阅读并且点评一篇英文技术文章 Tip/Techni: 学习一个技术技巧 Share: 分享一篇有观点和思考的技术文章 Algo ...

  5. 三小时攻克 Kubernetes!

    我保证本文是最详尽的 Kubernetes 技术文档,从我在后台排版了这么漫长的时间就能看出来.废话不多说——牢牢占据容器技术统治地位的 Kubernetes,其重要性想必不言而喻. 以下为译文: 为 ...

  6. PJzhang:ms17-010永恒之蓝漏洞在windows 2008R2中的复现

    猫宁!!! 参考: https://www.anquanke.com/post/id/86245 https://xz.aliyun.com/t/2536 https://www.cnblogs.co ...

  7. MSSQL 获取数据库、表、字段信息语句

    --获取所有数据库名称 SELECT Name FROM Master..SysDatabases ORDER BY Name --获取库里所有表名 SELECT * FROM SysObjects ...

  8. POJ 1161 Walls【floyd 以面为点建图】

    题目链接:http://poj.org/problem?id=1161 题目大意: 1.给出m个区域,n个俱乐部点.接下来是n个俱乐部点以及各个区域由什么点围成.求一个区域到各个俱乐部点的距离之和最小 ...

  9. poj1947(树上分组背包)

    题目链接:https://vjudge.net/problem/POJ-1947 题意:给定一棵树,求得到一个结点数为p最少删多少条边. 思路: 明显的树形dp,分组背包.用dp[u][j]表示在结点 ...

  10. [CF997C]Sky Full of Stars_二项式反演_等比数列_容斥原理

    Sky Full of Stars 题目链接:http://codeforces.com/problemset/problem/997/C 数据范围:略. 题解: 首先考虑拟对象,如果至少有一行完全相 ...