【51nod】1222 最小公倍数计数 莫比乌斯反演+组合计数
【题意】给定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 最小公倍数计数 莫比乌斯反演+组合计数的更多相关文章
- 数学:莫比乌斯反演-GCD计数
Luogu3455:莫比乌斯反演进行GCD计数 莫比乌斯反演就是用来解决这一类问题的,通常f函数是要求的那个,F函数是显然的 这样利用F的结果就可以推出来f的结果 在计算结果的时候整除分快儿一下就可以 ...
- 51NOD 1222 最小公倍数计数 [莫比乌斯反演 杜教筛]
1222 最小公倍数计数 题意:求有多少数对\((a,b):a<b\)满足\(lcm(a,b) \in [1, n]\) \(n \le 10^{11}\) 卡内存! 枚举\(gcd, \fra ...
- UOJ #54 时空穿梭 —— 计数+莫比乌斯反演+多项式系数
题目:http://uoj.ac/problem/54 10分还要用 Lucas 定理囧...因为模数太小了不能直接算... #include<cstdio> #include<cs ...
- 51nod 1222 最小公倍数计数【莫比乌斯反演】
参考:https://www.cnblogs.com/SilverNebula/p/7045199.html 所是反演其实反演作用不大,又是一道做起来感觉诡异的题 转成前缀和相减的形式 \[ \sum ...
- [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∑bi=1∑kj ...
- 51nod1222 最小公倍数计数 莫比乌斯反演 数学
求$\sum_{i = 1}^{n} \sum_{j = 1}^{i} [lcm(i, j) \le n]$因为这样不好求,我们改成求$\sum_{i = 1}^{n} \sum_{j = 1}^{n ...
- BZOJ 3518 点组计数 ——莫比乌斯反演
要求$ans=\sum_{i=1}^n \sum_{j=1}^m (n-i)(m-j)(gcd(i,j)-1)$ 可以看做枚举矩阵的大小,然后左下右上必须取的方案数. 这是斜率单增的情况 然后大力反演 ...
- BZOJ4517 Sdoi2016 排列计数 【DP+组合计数】*
BZOJ4517 Sdoi2016 排列计数 Description 求有多少种长度为 n 的序列 A,满足以下条件: 1 ~ n 这 n 个数在序列中各出现了一次 若第 i 个数 A[i] 的值为 ...
- 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 ...
随机推荐
- Markdown github 风格语法
某些效果cnblog无法支持,见 https://github.com/tanghammer/note/blob/master/Markdown%20github%E9%A3%8E%E6%A0%BC% ...
- (六)Jmeter重要组件的执行顺序及作用域
一.Jmeter重要组件: 1)配置元件---Config Element: 用于初始化默认值和变量,以便后续采样器使用.配置元件大其作用域的初始阶段处理,配置元件仅对其所在的测试树分支有效,如,在同 ...
- set集合,深浅拷贝以及部分知识点补充
目录: 1.基础数据类型补充 2.set集合 3.深浅拷贝 一,基础数据类型补充 字符串的基本操作 li = ["李李嘉诚", "麻花藤", "⻩黄海 ...
- DNS原理及解析过程
本文主要参考自:http://369369.blog.51cto.com/319630/812889 并做了小幅修改 什么是DNS? 因特网上的主机和人类一样,也可以使用多种方式进行识别.主机的一种识 ...
- 第161天:CSS3实现兼容性的渐变背景(gradient)效果
CSS实现兼容性的渐变背景(gradient)效果 一.有点俗态的开场白 在对CSS3支持日趋完善的今天,实现兼容性的渐变背景效果已经完全成为可能,本文就将展示如何实现兼容性的渐变背景效果.在众多的浏 ...
- .netMVC Vue axios 获取数据
网页 <link href="~/Content/css/bootstrap-theme.min.css" rel="stylesheet" /> ...
- java 常量 jvm在编译期能确定常量的 所以相等 但不能确定变量的范围 所以变量相加会产生新的
- 【Java】数据库查询的数据直接以指定文件类型下载到本地(弹出下载框)
欲实现的功能目标:当点击下图的导出数据文件时弹出文件下载框,默认csv格式,用户自定义下载的本地路径 遇到的问题: 1.项目之前做过一次下载,但是是使用了本地文件模板.用输入流读取文件模板,插入数据, ...
- 51nod 1526 分配笔名(字典树+贪心)
题意: 班里有n个同学.老师为他们选了n个笔名.现在要把这些笔名分配给每一个同学,每一个同学分配到一个笔名,每一个笔名必须分配给某个同学.现在定义笔名和真名之间的相关度是他们之间的最长公共前缀.设笔名 ...
- 【CodeChef PREFIXOR】Prefix XOR
https://odzkskevi.qnssl.com/f0fbdb108ec813b1294f8f714805963b?v=1502083692 网上搜到的题解: http://blog.csdn. ...