参考博客: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 (莫比乌斯进阶)的更多相关文章

  1. hdu4746 Mophues 莫比乌斯

    /** 题目:hdu4746 Mophues 链接:http://acm.hdu.edu.cn/showproblem.php?pid=4746 题意:求x,y在给定范围内gcd(x,y)分解素因子的 ...

  2. ACM学习历程—HDU4746 Mophues(莫比乌斯)

    Description As we know, any positive integer C ( C >= 2 ) can be written as the multiply of some ...

  3. hdu 4746 Mophues 莫比乌斯反演+前缀和优化

    Mophues 题意:给出n, m, p,求有多少对a, b满足gcd(a, b)的素因子个数<=p,(其中1<=a<=n, 1<=b<=m) 有Q组数据:(n, m, ...

  4. HDU 4746 Mophues (莫比乌斯反演应用)

    Mophues Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 327670/327670 K (Java/Others) Total ...

  5. hdu4746 Mophues

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4746 题意:给出n, m, p,求有多少对a, b满足gcd(a, b)的素因子个数<=p,(其 ...

  6. HDU 4746 Mophues 莫比乌斯反演

    分析: http://blog.csdn.net/acdreamers/article/details/12871643 分析参见这一篇 http://wenku.baidu.com/view/fbe ...

  7. hdu4746莫比乌斯反演进阶题

    Mophues Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 327670/327670 K (Java/Others)Total S ...

  8. HDU 4746 (莫比乌斯反演) Mophues

    这道题看巨巨的题解看了好久,好久.. 本文转自hdu4746(莫比乌斯反演) 题意:给出n, m, p,求有多少对a, b满足gcd(a, b)的素因子个数<=p,(其中1<=a<= ...

  9. Mophues HDU - 4746 (莫比乌斯反演)

    Mophues \[ Time Limit: 10000 ms\quad Memory Limit: 262144 kB \] 题意 求出满足 \(gcd\left(a,b\right) = k\), ...

随机推荐

  1. 浅谈RNN、LSTM + Kreas实现及应用

    本文主要针对RNN与LSTM的结构及其原理进行详细的介绍,了解什么是RNN,RNN的1对N.N对1的结构,什么是LSTM,以及LSTM中的三门(input.ouput.forget),后续将利用深度学 ...

  2. ubuntu开发项目不能执行热更新

    当项目开发到一定成熟度,项目基本上比较大(vue,angular,react,java,php等),在Ubuntu系统环境下,我们写了代码,但是不能想Windows一样执行热更新,这是因为Ubuntu ...

  3. 日志模块logging用法

    一.常用日志记录场景及最佳解决方案: 日志记录方式 最佳记录日志方案 普通情况下,在控制台显示输出 print() 报告正常程序操作过程中发生的事件 logging.info()(或者更详细的logg ...

  4. Odd-e CSD Course Day 3

    Mocking 在提到Mocking時,其實有提到為什麼我們需要 Mocking from: Odd-e CSD course 可以透過上圖來了解這個概念,當我們需要用到 Mock 時,其實是因為我們 ...

  5. 字符串string 、byte[]、MemoryStream、Base64String的相互转换

    1.字符串转比特数组 (1)byte[] bt=System.Text.Encoding.Default.GetBytes("字符串"); (2)byte[] bt=Convert ...

  6. InnoSetup 客户端程序打包教程

    之前介绍过InstallShield打包工具,本文再介绍更加方便的打包工具Inno Setup Inno Setup相对来说,比InstallShield更容易使用,不需要在VS中创建项目,只要提供D ...

  7. 2018.12/6 js键盘事件 DOM:0级2级

    DOM0级事件元素绑定多个click最后只执行最后一个click. DOM2级事件元素绑定多个click,都要执行 注意当绑定的多个事件名,函数名,事件发生阶段三者完全一样时,才执行最后一个 div. ...

  8. MySQL优化COUNT()查询

    COUNT()聚合函数,以及如何优化使用了该函数的查询,很可能是最容易被人们误解的知识点之一 COUNT()的作用 COUNT()是一个特殊的函数,有两种非常不同的作用: 统计某个列值的数量 统计行数 ...

  9. java开发环境配置——IDEA SVN的使用

    一.安装svn客户端,在idea中配置svn 装小乌龟,TortoiseSVN ,就下图一个要注意的地方,这里默认 command line client tools是不安装的,选上.如果已经安装过了 ...

  10. 程序员50题(JS版本)(四)

    程序16:求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字.例如2+22+222+2222+22222(此时共有5个数相加),几个数相加有键盘控制 var s=0; var num ...