【题意】给定a和b,求满足a<=lcm(x,y)<=b && x<y的数对(x,y)个数。a,b<=10^11。

【算法】莫比乌斯反演+组合计数

【题解】★具体推导过程参考:51nod1222 最小公倍数计数

过程运用到的技巧:

1.将所有i和j的已知因子提取出来压缩上届。

2.将带有μ(k)的k提到最前面,从而后面变成单纯的三元组形式。

最终形式:

$$ans=\sum_{k=1}^{\sqrt n} \mu(k)  \sum_{d}    \sum_{i} \sum_{j} [i*j*d<=\frac{n}{k^2}]$$

问题转化为枚举(d,i,j)三元组满足其乘积<=n/k^2。

虽然题目要求组合(有序),但是有d的存在,所以先求排列(无序)。

但是三元组的排列不方便统计,所以求三元组的组合乘上排列系数

先算严格从小到大的,然后减去两个相同的和三个相同的。

最后+n后/2就变成组合。

听说复杂度O(n^(2/3))。

#include<cstdio>
#include<cmath>
#define int long long
using namespace std;
const int maxn=;
int miu[maxn],prime[maxn],tot;
bool vis[maxn];
int solve(int x){
if(!x)return ;
int N=(int)sqrt(x)+,ans=;
for(int k=;k<=N;k++)if(miu[k]){
int n=x/(k*k);
for(int d=;d*d*d<=n;d++){
for(int i=d+;i*i*d<=n;i++)ans+=miu[k]*((n/(d*i)-i)*+);
ans+=miu[k]*((n/(d*d)-d)*+);
}
}
return (ans+x)/;
}
#undef int
int main(){
#define int long long
int A,B;
scanf("%lld%lld",&A,&B);
int N=(int)sqrt(B)+;
miu[]=;
for(int i=;i<=N;i++){
if(!vis[i]){miu[prime[++tot]=i]=-;}
for(int j=;j<=tot&&i*prime[j]<=N;j++){
vis[i*prime[j]]=;//
if(i%prime[j]==)break;
miu[i*prime[j]]=-miu[i];
}
}
printf("%lld\n",solve(B)-solve(A-));
return ;
}

【51nod】1222 最小公倍数计数 莫比乌斯反演+组合计数的更多相关文章

  1. 数学:莫比乌斯反演-GCD计数

    Luogu3455:莫比乌斯反演进行GCD计数 莫比乌斯反演就是用来解决这一类问题的,通常f函数是要求的那个,F函数是显然的 这样利用F的结果就可以推出来f的结果 在计算结果的时候整除分快儿一下就可以 ...

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

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

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

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

  4. 51nod 1222 最小公倍数计数【莫比乌斯反演】

    参考:https://www.cnblogs.com/SilverNebula/p/7045199.html 所是反演其实反演作用不大,又是一道做起来感觉诡异的题 转成前缀和相减的形式 \[ \sum ...

  5. [51Nod 1222] - 最小公倍数计数 (..怎么说 枚举题?)

    题面 求∑k=ab∑i=1k∑j=1i[lcm(i,j)==k]\large\sum_{k=a}^b\sum_{i=1}^k\sum_{j=1}^i[lcm(i,j)==k]k=a∑b​i=1∑k​j ...

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

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

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

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

  8. BZOJ4517 Sdoi2016 排列计数 【DP+组合计数】*

    BZOJ4517 Sdoi2016 排列计数 Description 求有多少种长度为 n 的序列 A,满足以下条件: 1 ~ n 这 n 个数在序列中各出现了一次 若第 i 个数 A[i] 的值为 ...

  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. lintcode-426-恢复IP地址

    426-恢复IP地址 给一个由数字组成的字符串.求出其可能恢复为的所有IP地址. 样例 给出字符串 "25525511135",所有可能的IP地址为: [ "255.25 ...

  2. jQuery之属性

    1. 操作任意属性 attr() 操作非布尔值的 removeAttr() prop() 操作布尔值的2. 操作class属性 addClass() 添加class属性 removeClass() 移 ...

  3. 软工alpha阶段个人总结

    一.个人总结 类别 具体技能和面试问题 现在的回答(大三下) 语言 最拿手的语言之一,代码量是多少? java,代码量在一万行左右 语言 最拿手的语言之二,代码量是多少? C语言,代码量在五千行左右 ...

  4. beta阶段——项目复审

    beta阶段--项目复审 小组的名字和链接 优点 缺点 bug 排名顺序 颜罗王team http://www.cnblogs.com/LDLYMteam 界面清新,音乐能够选择是否播放,词汇按照四六 ...

  5. Sublime Text怎么设置文件在新标签打开?

    设置Sublime Text新标签页tab打开文件.Sublime Text Files not opening a new tab?每次打开文件,Sublime Text总是把当前的tab打开的文件 ...

  6. Delphi定位TDataSet数据集最后一条记录

    dst_temp.last ;//最后一条dst_temp.first ;//第一条dst_temp.next ;//下一条dst_temp.prior;//上一条

  7. HDU4472_Count

    题目的意思简单,给你n个点,每个点(除根节点)都有且只有一个父节点.现在问你这些节点关系组成的图有多少种情况满足同一层节点上每个点的后继节点数量相等. 很简单,对于n节点,直接枚举n-1的的所有约数情 ...

  8. jquery中的append功能相当于剪切的作用 将原来的元素剪切走

    jquery中的append功能相当于剪切的作用 将原来的元素剪切走

  9. CSS预处理语言-less 的使用

    Less 是一门 CSS 预处理语言,它扩展了 CSS 语言,增加了变量.Mixin.函数等特性,使 CSS 更易维护和扩展. Less 可以运行在 Node 或浏览器端. Less的编译处理 作为一 ...

  10. [四]SpringBoot 之 捕捉全局异常

    在class注解上@ControllerAdvice, 在方法上注解上@ExceptionHandler(value = Exception.class),具体代码如下: package me.shi ...