题目传送门

分析:

开始玩一个小小的trick

我们发现\(f(n)=\sum_{d|n}\mu(d)\cdot d\)是一个积性函数

所以:

\(~~~~f(n)=\prod f(p_i^{a_i})\)
\(~~~~f(gcd(x,y))\cdot f(lcm(x,y))=\prod f(p_i^{min(a_i,b_i)})\cdot f(p_i^{max(a_i,b_i)})\)

可以疯狂使用交换律然后。。。

\(~~~~\prod f(p_i^{min(a_i,b_i)})\cdot f(p_i^{max(a_i,b_i)})=f(x)\cdot f(y)\)

接下来就好办了,大力推:

\(~~~~\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\)

我们求里面的:

\(~~~~\sum_{i=1}^{n}\sum_{d|i}\mu(d)\cdot d\)
\(=\sum_{d=1}^{n}\mu(d)\cdot d\cdot \lfloor\frac{n}{d}\rfloor\)

分块处理\(\lfloor\frac{n}{d}\rfloor\)

后面的老套路,卷一个\(Id\)

\(~~~~\sum_{i=1}^{n}\sum_{d|i}\mu(d)\cdot d\cdot \frac{i}{d}=\sum_{i=1}^{n}i\sum_{d|i}\mu(d)=1\)
\(=\sum_{d=1}^{n}d\sum_{i=1}^{\lfloor\frac{n}{d}\rfloor}\mu(i)\cdot i\)

把\(d=1\)提出来:

\(~~~~\sum_{i=1}^{n}\mu(i)\cdot i=1-\sum_{d=2}^{n}d\sum_{i=1}^{\lfloor\frac{n}{d}\rfloor}\mu(i)\cdot i\)
\(~~~~S(n)=1-\sum_{d=2}^{n}d\cdot S(\lfloor\frac{n}{d}\rfloor)\)

然后杜教筛就好了

#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<vector>
#include<iostream>
#include<map>
#include<string> #define maxn 100005
#define INF 0x3f3f3f3f
#define MOD 1000000007
#define inv2 500000004 using namespace std; inline long long getint()
{
long long num=0,flag=1;char c;
while((c=getchar())<'0'||c>'9')if(c=='-')flag=-1;
while(c>='0'&&c<='9')num=num*10+c-48,c=getchar();
return num*flag;
} long long N;
long long pri[maxn],cnt,np[maxn],mu[maxn];
long long ans;
map<long long,long long>M; inline void init()
{
mu[1]=1;
for(int i=2;i<maxn;i++)
{
if(!np[i])pri[++cnt]=i,mu[i]=-1;
for(int j=1;j<=cnt&&i*pri[j]<maxn;j++)
{
np[i*pri[j]]=1;
if(i%pri[j]==0)break;
mu[i*pri[j]]=-mu[i];
}
}
for(int i=1;i<maxn;i++)(mu[i]*=i)%=MOD;
for(int i=1;i<maxn;i++)(mu[i]+=mu[i-1])%=MOD;
} inline long long getans(long long x)
{
if(x<maxn)return mu[x];
if(M.count(x))return M[x];
long long num=1;
for(long long i=2,j;i<=x;i=j+1)
{
j=x/(x/i);
(num+=MOD-(i+j)*(j-i+1)%MOD*inv2%MOD*getans(x/i))%=MOD;
}
return M[x]=num;
} int main()
{
N=getint();
init();
for(long long i=1,j;i<=N;i=j+1)
{
j=N/(N/i);
(ans+=(N/i)*(getans(j)-getans(i-1)))%=MOD;
}
printf("%lld\n",(ans*ans%MOD+MOD)%MOD);
}

51Nod 2026 Gcd and Lcm的更多相关文章

  1. 【51nod】2026 Gcd and Lcm

    题解 话说LOJ说我今天宜学数论= =看到小迪学了杜教筛去蹭了一波小迪做的题 标解的杜教筛的函数不懂啊,怎么推的毫无思路= = 所以写了个复杂度稍微高一点的?? 首先,我们发现f是个积性函数,那么我们 ...

  2. 51nod 1575 Gcd and Lcm

    题目链接:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1575 万年巨坑终于填掉了…… 首先是煞笔西瓜的做题历程O_O. ...

  3. HDOJ 4497 GCD and LCM

    组合数学 GCD and LCM Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65535/65535 K (Java/Others) ...

  4. hdu 4497 GCD and LCM 数学

    GCD and LCM Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=4 ...

  5. GCD 与 LCM UVA - 11388

    题目链接: https://cn.vjudge.net/problem/23709/origin 本题其实有坑 数据大小太大, 2的32次方,故而一定是取巧的算法,暴力不可能过的 思路是最大公因数的倍 ...

  6. 简单数论总结1——gcd与lcm

    并不重要的前言 最近学习了一些数论知识,但是自己都不懂自己到底学了些什么qwq,在这里把知识一并总结起来. 也不是很难的gcd和lcm 显而易见的结论: 为什么呢? 根据唯一分解定理: a和b都可被分 ...

  7. poj 2429 GCD &amp; LCM Inverse 【java】+【数学】

    GCD & LCM Inverse Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 9928   Accepted:  ...

  8. HDU 4497 GCD and LCM (合数分解)

    GCD and LCM Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65535/65535 K (Java/Others)Total ...

  9. hdu4497 GCD and LCM

    GCD and LCM Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65535/65535 K (Java/Others) Total S ...

随机推荐

  1. json文件生成

    // import Translate from 'translate-components' /* * 匹配所有汉字RegExp: [\u4e00-\u9fa5] [\u4E00-\u9FA5]|[ ...

  2. string的常见操作

    访问 遍历 不需修改:for(auto c : s)   需要修改:for(auto &c : s)​ for(decltype(s.size()) i = 0; i < s.size( ...

  3. python列表的增删查改

    添加新的元素 append() insert() extend() +号 删除元素 pop() remove() del xxx[index] 修改 xxx[index] = value 查找 in. ...

  4. 用Robot Framework+python来测试基于socket通讯的C/S系统(网络游戏)

    项目终于换了方案,改用socket来实现而不是之前的http了,所以测试工具就不能用以前的了,因为测试人手少,逼不得已的必须要挖掘更多的自动化方案来弥补.于是先研究了下python的socket解决方 ...

  5. vue项目创建步骤 和 路由router知识点

    菜单快捷导航: vue项目创建 vue路由router知识点(路径参数.查询参数.命名路由.嵌套路由.命名视图.hash/history模式) 1.创建一个vue项目步骤 (windows环境下).创 ...

  6. 别怕,"卷积"其实很简单(上)

    文章来自我的CSDN同名博客,欢迎文末扫码关注~   前言 相信很多时候,当我们在看到“卷积”时,总是处于一脸懵逼的状态,不但因为它的本身概念比较难理解,还因为它在不同的应用中发挥出的变幻莫测的作用也 ...

  7. 004使用u-boot烧写裸版程序

  8. 洛谷$P4099\ [HEOI2013]\ SAO\ dp$

    正解:树形$dp$ 解题报告: 传送门$QwQ$. 考虑设$f_i$表示点$i$的子树内的拓扑序排列方案数有多少个. 发现这样不好合并儿子节点和父亲节点.于是加一维,设$f_{i,j}$表示点$i$的 ...

  9. $Poj2083/AcWing118\ Fractal$ 模拟

    $AcWing$ $Sol$ 一年前做过差不多的南蛮图腾,当时做出来还是很有成就感的$OvO$ $N<=7$,就是模拟模拟,预处理一下,$over$ $Code$ #include<bit ...

  10. 洛谷P1832 A+B Problem(再升级) 题解 完全背包方案计数

    题目链接:https://www.luogu.com.cn/problem/P1832 题目大意: 给定一个正整数n,求将其分解成若干个素数之和的方案总数. 解题思路: 首先找到所有 \(\le n\ ...