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多线程(2):数据共享和线程安全
线程数据共享 在介绍Perl解释器线程的时候一直强调,Perl解释器线程在被创建出来的时候,将从父线程中拷贝数据到子线程中,使得数据是线程私有的,并且数据是线程隔离的.如果真的想要在线程间共享数据,需 ...
- Spring Cloud Alibaba基础教程:使用Nacos作为配置中心
通过本教程的前两篇: <Spring Cloud Alibaba基础教程:使用Nacos实现服务注册与发现> <Spring Cloud Alibaba基础教程:支持的几种服务消费方 ...
- DSAPI多功能组件编程应用-使用外部字体(包括资源文件)
在软件开发过程中,尤其是比较个性化的程序,有时会需要使用非安装字体文件,比如发布的时候附带了一个专用字体,或者该字体文件直接被放入项目资源,当不希望把这个字体安装到用户的操作系统但又想使用它时,本示例 ...
- [转]gitlab cicd (二)系列之安装git-runner rpm安装方式
本文转自:https://blog.csdn.net/qq_21816375/article/details/84308748 本编是继gitlab cicd (一)系列之安装gitlb之后,基于安装 ...
- Python批量修改寄存器的值
在写代码过程中,我们修改代码中寄存器的值,但是有时寄存器的数据较多,手动修改容易出现错误而且花费的时间长 这是一段寄存器的配置值: 0x00, 0x34 0x35, 0x25 0x10, 0xd4 ...
- MySQL中 and or 查询的优先级
这个可能是容易被忽略的问题,首选我们要清楚:MySQL中,AND的执行优先级高于OR.也就是说,在没有小括号()的限制下,总是优先执行AND语句,再执行OR语句.比如: select * from t ...
- 学JAVA第三天,JAVA第二章《JAVA数据类型》
---恢复内容开始--- <JAVA数据类型> 我们一般都用int类型,因为int类行一般的日常生活的数据都能满足了. 当然,想李嘉诚,马云这种有钱人,int类行就不能满足帮他记钱的了,像 ...
- CentOS下RabbitMq高可用集群环境搭建
准备工作 1,准备两台或多台安装有rabbitmq-server服务的服务器 我这里准备了两台,分别如下: 192.168.40.130 rabbitmq01192.168.40.131 rabbit ...
- 为什么说Java程序员到了必须掌握Spring Boot的时候?
摘要: SpringBoot的来龙去脉. 原文:为什么说 Java 程序员到了必须掌握 Spring Boot 的时候? 微信公众号:纯洁的微笑 Fundebug经授权转载,版权归原作者所有. Spr ...
- CTSC 2018酱油记
Day0 5.5 花了一上午的时间把codechef div2的前四题切了,又在zbq老司机的指导下把第五题切了 中午12:00 gryz电竞组从机房出发,临走的时候看到很多学长挺恋恋不舍的,毕竟可能 ...