题面

传送门

题解

我此生可能注定要和反演过不去了……死都看不出来为啥它会突然繁衍反演起来啊……

设\(f(n)=\sum_{i=1}^n\sum_{j=1}^n[{ij\over\gcd(i,j)}\leq n]\),这是一个类似前缀的东西,除了\([i,i]\)型的之外每一个二元组都被算了\(2\)次,所以\({f(n)+n\over 2}\)就是\(lcm\)小于等于\(n\)的二元组个数,答案就是两个前缀和相减的形式

所以现在问题来了,该怎么计算\(f(n)\)呢……

二话不说先推倒吧……顺便下面的除法都是整除……懒得打下取整了……

\[\begin{align}
f(n)
&=\sum_{i=1}^n\sum_{j=1}^n[{ij\over\gcd(i,j)}\leq n]\\
&=\sum_{d=1}^n\sum_{i=1}^{n\over d}\sum_{j=1}^{n\over d}[ij\leq {n\over d}][(i,j)=1]\\
\end{align}
\]

然后?把\([n=1]\)化成\(\sum_{d|n}\mu(d)\)啊

\[\begin{align}
f(n)
&=\sum_{d=1}^n\sum_{i=1}^{n\over d}\sum_{j=1}^{n\over d}[ij\leq {n\over d}]\sum_{k|(i,j)}\mu(k)\\
&=\sum_{d=1}^n\sum_{k=1}^{n\over d}\sum_{i=1}^{n\over dk}\sum_{j=1}^{n\over dk}[ikjk\leq {n\over d}]\\
&=\sum_{k=1}^n\sum_{d=1}^{n\over k}\sum_{i=1}^{n\over dk}\sum_{j=1}^{n\over dk}[ijd\leq {n\over k^2}]\\
\end{align}
\]

为了保证\([ijd\leq {n\over k^2}]\)有解,所以可以把求和的上界

\[\begin{align}
f(n)
&=\sum_{k=1}^\sqrt{n}\sum_{d=1}^{n\over k^2}\sum_{i=1}^{n\over dk^2}\sum_{j=1}^{n\over dk^2}[ijd\leq {n\over k^2}]\\
\end{align}
\]

然后发现在\(i,j,d\)满足括号里的条件时怎么样都不会超出限制了,所以我们枚举\(k\),对于每个\(k\)只要求出这样的三元组有多少个就行了

因为这个三元组是无序的,我们可以强制它有序,也就是\(d\leq i\leq j\),然后分别计算一个数相等,两个数相等,三个数相等的三元组个数,分别乘对应的组合数就行了

复杂度的话……鉴于咱还没学过微积分所以不会算呐……

//minamoto
#include<bits/stdc++.h>
#define R register
#define ll long long
#define fp(i,a,b) for(R int i=a,I=b+1;i<I;++i)
#define fd(i,a,b) for(R int i=a,I=b-1;i>I;--i)
#define go(u) for(int i=head[u],v=e[i].v;i;i=e[i].nx,v=e[i].v)
using namespace std;
const int N=1e6+5;
bitset<N>vis;int p[N],mu[N],top,sqr,tot;ll n,m;
void init(int n){
mu[1]=1;
fp(i,2,n){
if(!vis[i])p[++tot]=i,mu[i]=-1;
for(R int j=1;j<=tot&&1ll*i*p[j]<=n;++j){
vis[i*p[j]]=1;
if(i%p[j]==0)break;
mu[i*p[j]]=-mu[i];
}
}
}
ll calc(ll n){
if(!n)return 0;
ll res=0,tmp=0,S;
fp(k,1,sqr)if(mu[k]){
tmp=0,S=n/(1ll*k*k);
for(R int i=1;1ll*i*i*i<=S;++i){
for(R int j=i+1;1ll*i*j*j<=S;++j)
tmp+=(S/(1ll*i*j)-j)*6+3;
tmp+=(S/(1ll*i*i)-i)*3;
++tmp;
}
res+=mu[k]*tmp;
}
return (res+n)>>1;
}
int main(){
// freopen("testdata.in","r",stdin);
scanf("%lld%lld",&m,&n),init(sqr=sqrt(n));
printf("%lld\n",calc(n)-calc(m-1));
return 0;
}

[51nod1222] 最小公倍数计数(莫比乌斯反演)的更多相关文章

  1. 51nod1222 最小公倍数计数 莫比乌斯反演 数学

    求$\sum_{i = 1}^{n} \sum_{j = 1}^{i} [lcm(i, j) \le n]$因为这样不好求,我们改成求$\sum_{i = 1}^{n} \sum_{j = 1}^{n ...

  2. 【51nod】1222 最小公倍数计数 莫比乌斯反演+组合计数

    [题意]给定a和b,求满足a<=lcm(x,y)<=b && x<y的数对(x,y)个数.a,b<=10^11. [算法]莫比乌斯反演+组合计数 [题解]★具体 ...

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

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

  4. 51nod1222 最小公倍数计数

    题目来源: Project Euler 基准时间限制:6 秒 空间限制:131072 KB 分值: 640  定义F(n)表示最小公倍数为n的二元组的数量. 即:如果存在两个数(二元组)X,Y(X & ...

  5. UOJ #54 时空穿梭 —— 计数+莫比乌斯反演+多项式系数

    题目:http://uoj.ac/problem/54 10分还要用 Lucas 定理囧...因为模数太小了不能直接算... #include<cstdio> #include<cs ...

  6. 51Nod1222 最小公倍数计数 数论 Min_25 筛

    原文链接https://www.cnblogs.com/zhouzhendong/p/51Nod1222.html 题意 给定 $a,b$, 求 $$\sum_{n=a}^b \sum_{i=1}^n ...

  7. 51nod1222最小公倍数计数

    51nod1222 http://210.33.19.103/contest/1113/problem/2 同学的神仙做法: 首先考虑先去掉X<=Y的限制,也就是先计算满足要求的任意有序pair ...

  8. BZOJ 3518 点组计数 ——莫比乌斯反演

    要求$ans=\sum_{i=1}^n \sum_{j=1}^m (n-i)(m-j)(gcd(i,j)-1)$ 可以看做枚举矩阵的大小,然后左下右上必须取的方案数. 这是斜率单增的情况 然后大力反演 ...

  9. luogu3911 最小公倍数之和(莫比乌斯反演)

    link 给定\(A_1,A_2,\dots,A_N\),求\(\sum_{i=1}^N\sum_{j=1}^Nlcm(A_i,A_j)\) \(1\le N\le 50000;1\le A_i\le ...

随机推荐

  1. 机器学习:线性回归法(Linear Regression)

    # 注:使用线性回归算法的前提是,假设数据存在线性关系,如果最后求得的准确度R < 0,则说明很可能数据间不存在任何线性关系(也可能是算法中间出现错误),此时就要检查算法或者考虑使用其它算法: ...

  2. wpf数据验证实例及常用方法小结

    虽然标题是wpf数据验证,但并不是对IDataErrorInfo.ValidationRule.属性中throw Exception这几种验证方式的介绍: 之前做项目时(例如员工工资管理),根据员工编 ...

  3. 使用Asset Pipeline管理rails生产环境静态资源实现步骤

    1.    修改项目中指向静态资源文件的链接 a)     访问静态资源文件 <%= stylesheet_link_tag "application", media: &q ...

  4. Celery-4.1 用户指南: Routing Tasks (路由任务)

    注意: 像主题和扇出之类的路由概念并不对所有传输介质都可用,请翻阅”传输比较表”. 基础 自动路由 路由最简单的方式是使用 task_create_missing_queues 设置(默认启用). 使 ...

  5. bash姿势-没有管道符执行结果相同于管道符

    听起来比较别口: 直接看代码: shell如下: [root@sevck_linux ~]# </etc/passwd grep root root:x:::root:/root:/bin/ba ...

  6. Python函数(十)-装饰器(三)

    如果多个函数想通过一个装饰器来实现不同的功能的话,可以给装饰器传入参数,让装饰器里的函数对参数进行判断,来实现不同的功能 # -*- coding:utf-8 -*- __author__ = &qu ...

  7. 问题:oracle 字符串转换成日期;结果:[oracle] to_date() 与 to_char() 日期和字符串转换

    to_date("要转换的字符串","转换的格式")   两个参数的格式必须匹配,否则会报错. 即按照第二个参数的格式解释第一个参数. to_char(日期,& ...

  8. cygwin选择安装包选项搭建NDK开发环境/配置cygwin的root权限

    9.Search是可以输入你要下载的包的名称,能够快速筛选出你要下载的包.那四个单选按钮是选择下边树的样式,默认就行,不用动.View默认是Category,建议改成full显示全部包再查,省的一些包 ...

  9. JS写一个简单的程序,判断年份是平年还是闰年

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  10. latex bib format

    LaTeX 的对参考文献的处理实在是非常的方便,我用过几次,有些体会,写出来供大家参考.当然,自己的功力还不够深,有些地方问题一解决就罢手了,没有细究. LaTeX 对参考文献的处理有这么一些优点: ...