hdu4746 Mophues (莫比乌斯进阶)
参考博客:https://blog.csdn.net/acdreamers/article/details/12871643
题意:满足1<=x<=n,1<=y<=m,并且gcd(x,y)的因子小于p的(x,y)对数
分析:先把1到1e5的因子个数预处理出来。设P(x)=(n/x)*(m/x),G(x)答案中P(x)的系数,可以预先求出对于某个p的所有P(x),然后再用分块加速求出最后的ans
代码:
#include <bits/stdc++.h>
using namespace std;
#define ll long long
const int maxn=5e5+10;
const int maxm=20;
int u[maxn],pri[maxn],cnt,is[maxn],lucky[maxn];
ll F[maxn][maxm];
void mobius()
{
u[1]=1;
for(int i=2;i<maxn;i++)
{
if(is[i]==0)
{
cnt++;
u[i]=-1;
pri[cnt]=i;
}
for(int j=1;j<=cnt;j++)
{
ll k=i*pri[j];
if(k>=maxn)break;
is[k]=1;
if(i%pri[j]==0)
{
u[k]=0;
break;
}
else u[k]=-u[i];
}
}
}
int main()
{
mobius();
lucky[1]=0;
for(int i=1;i<=cnt;i++)
{
// cout<<pri[i]<<endl;
for(int j=1;j*pri[i]<maxn;j++)
{
int k=j*pri[i];
while(k%pri[i]==0)
k/=pri[i],lucky[j*pri[i]]++;
}
}
for(int i=1;i<maxn;i++)
{
for(int j=i;j<maxn;j+=i)
F[j][lucky[i]]+=u[j/i];
}
for(int i=1;i<maxn;i++)
{
for(int j=1;j<maxm;j++)
F[i][j]+=F[i][j-1];
}
for(int i=0;i<maxm;i++)
{
for(int j=2;j<maxn;j++)
F[j][i]+=F[j-1][i];
}
int T;
scanf("%d",&T);
while(T--)
{
int n,m,q;
scanf("%d %d %d",&n,&m,&q);
if(q>=maxm)
{
printf("%lld\n",(ll)n*m);
continue;
}
if(n>m)swap(n,m);
ll ans=0;
for(int i=1,j;i<=n;i=j+1)
{
j=min(n/(n/i),m/(m/i));
ans+=(ll)(F[j][q]-F[i-1][q])*(n/i)*(m/i);
}
printf("%lld\n",ans);
}
return 0;
}
hdu4746 Mophues (莫比乌斯进阶)的更多相关文章
- hdu4746 Mophues 莫比乌斯
/** 题目:hdu4746 Mophues 链接:http://acm.hdu.edu.cn/showproblem.php?pid=4746 题意:求x,y在给定范围内gcd(x,y)分解素因子的 ...
- ACM学习历程—HDU4746 Mophues(莫比乌斯)
Description As we know, any positive integer C ( C >= 2 ) can be written as the multiply of some ...
- hdu 4746 Mophues 莫比乌斯反演+前缀和优化
Mophues 题意:给出n, m, p,求有多少对a, b满足gcd(a, b)的素因子个数<=p,(其中1<=a<=n, 1<=b<=m) 有Q组数据:(n, m, ...
- HDU 4746 Mophues (莫比乌斯反演应用)
Mophues Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 327670/327670 K (Java/Others) Total ...
- hdu4746 Mophues
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4746 题意:给出n, m, p,求有多少对a, b满足gcd(a, b)的素因子个数<=p,(其 ...
- HDU 4746 Mophues 莫比乌斯反演
分析: http://blog.csdn.net/acdreamers/article/details/12871643 分析参见这一篇 http://wenku.baidu.com/view/fbe ...
- hdu4746莫比乌斯反演进阶题
Mophues Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 327670/327670 K (Java/Others)Total S ...
- HDU 4746 (莫比乌斯反演) Mophues
这道题看巨巨的题解看了好久,好久.. 本文转自hdu4746(莫比乌斯反演) 题意:给出n, m, p,求有多少对a, b满足gcd(a, b)的素因子个数<=p,(其中1<=a<= ...
- Mophues HDU - 4746 (莫比乌斯反演)
Mophues \[ Time Limit: 10000 ms\quad Memory Limit: 262144 kB \] 题意 求出满足 \(gcd\left(a,b\right) = k\), ...
随机推荐
- 第23章 Windows身份验证 - Identity Server 4 中文文档(v1.0.0)
在支持的平台上,您可以使用IdentityServer使用Windows身份验证对用户进行身份验证(例如,针对Active Directory).当前使用以下命令托管IdentityServer时,W ...
- 浅谈CLR CTS CLS。。。
So The First Is CLR CLR的全程是Common Language Runtime 公共语言运行时 可以把他理解为包含运行.net程序的引擎 和 一堆符合公共语言基础(CLI)的类 ...
- Ubuntu 18.04 安装java8
step1: 添加ppa sudo add-apt-repository ppa:webupd8team/java sudo apt-get update step2: 安装oracle-java-i ...
- 【Linux】Linux上安装Nginx
本文介绍Linux环境安装Nginx,这里用的Linux系统是CentOS 7.2. 1. 从Nginx官网下载Nginx.这里用的版本为:1.13.6. 2. 将下载下来的Nginx上传到Linux ...
- SpringMVC进行文件上传
进行文件上传前需要添加相应的依赖 在xml文件中进行相应的文件上传解析器的配置 注意:这里有个坑,因为没注意,再排查错误的时候花了一点时间.就是给bean的id一定要是. 否者就会报如下的错误:
- 牛客网:java入门实现遍历目录
项目介绍 遍历目录是操作文件时的一个常见需求.比如写一个程序,需要找到并处理指定目录下的所有JS文件时,就需要遍历整个目录.该项目教会你如何使用流式编程和lambda表达式,帮助你进一步熟悉java8 ...
- 【学习笔记】【Design idea】一、Java异常的设计思想、性能相关、笔记
1.前言: 异常.本该是多么优雅的东西,然而,得全靠自己在零散的信息中汇集. 学习笔记保持更新. 2.教材(参考资料) 其他 ①受检异常与非受检异常:https://www.cnblogs.com/j ...
- macos 常用快捷键及操作
通用: 拷贝相当于window下的复制非苹果键盘(command == win option == alt control == ctrl)Command + C 拷贝(Copy)Command + ...
- java.lang.NullPointerException一个低级的解决方法
java.lang.NullPointerException 这次因为调用了类的方法的时候忘记了new对象了 导致该对象为空
- LV 指定或修改逻辑卷的major, minor号[RHEL6]
在创建逻辑卷时,可以指定逻辑卷的major和minor设备号. [-M|--persistent {y|n}] //Set to y to make the minor number specifie ...