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\), ...
随机推荐
- Perl获取主机名、用户、组、网络信息
获取主机名.用户.组.网络信息相关函数 首先是获取主机名的方式,Perl提供了Sys::Hostname模块,可以查询当前的主机名: use Sys::Hostname; print hostname ...
- 服务器配置https
服务器配置https 第一步.申请证书 这个网上有很多申请方法,不论你是阿里云还是腾讯云都有自带的申请途经,这里就不再赘述. 第二步.进行配置(linux) 1.在tomcat的conf目录下创建新的 ...
- Runloop详解
RunLoop是iOS和OSX开发中非常基础的一个概念,这篇文章将从源码以及应用入手,介绍RunLoop的概念以及底层实现原理.本人看了一下RunLoop的英语源码,以及借鉴部分优秀博客,感谢!读完这 ...
- c#计算机视觉库openCVSharp
作为研究计算机视觉的一员,大家肯定对Intel大名鼎鼎的openCV系列计算机视觉库耳熟能详,对于很多人来说openCV甚至已经成为其项目研究不可缺少的一部分.但是,由于项目兼容性的要求.openCV ...
- Android开发——使用intent传递对象
intent传递对象有两种方法: 方式一:Serializable 方式 方式二:Parcelable方式 在这里不多介绍了,这一篇就是快速上手使用教程,至于详细原理介绍的,请看这一篇http://w ...
- 程序员50题(JS版本)(四)
程序16:求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字.例如2+22+222+2222+22222(此时共有5个数相加),几个数相加有键盘控制 var s=0; var num ...
- [笔记]原生JS实现的DOM操作笔记
原生JS实现的DOM一系列操作参考: 原生JavaScript封装DOM库 siblings: 原生JS-查找相邻的元素-siblings方法的实现 addClass,removeClass,hasC ...
- Vs2017 无法调试APP
其实一切都是扯,看看有没有主活动吧 症状:能部署安装,没有快捷方式,不启动调试.XARAMIN不能在XML中配置主活动,会自动根据[Activity(Label = "AA", ...
- postgresql 日志报错could not write to log file: No space left on device,could not write lock file "postmaster.pid": No space left on device
今天遇到了一个特别奇怪的问题,我在用docker容器的时候,发现我的postgresql怎么也启动不起来 尝试了N多种办法,最后看了看postgresql的日志发现 postgresql 日志中报错 ...
- WordCount
一.Gitee地址:https://gitee.com/zjgss99/WordCount 二.项目分析: 对程序设计语言源文件统计字符数.单词数.行数,统计结果以指定格式输出到默认文件中,以及其他扩 ...