HDU - 4746预处理莫比乌斯反演
求[1,n] 和 [1,m]中有多少对数的GCD的素因子个数小于等于p
直接暴力做特定超时,所以我们想办法预处理,对于p大于18(1到5e5的最大素数因子个数)的情况,每一对都满足条件,O(1)得结果。
p<=18时,预处理sum【i】【j】sum[i][j]表示所有能整除i的质因子个数<=j的(x,y)的对数,然后求一个前缀和,ans=∑⌊n/d⌋∗⌊m/d⌋∗∑k|dμ(d/k)
//#pragma comment(linker, "/stack:200000000")
//#pragma GCC optimize("Ofast,no-stack-protector")
//#pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tune=native")
//#pragma GCC optimize("unroll-loops")
#include<bits/stdc++.h>
#define fi first
#define se second
#define mp make_pair
#define pb push_back
#define pi acos(-1.0)
#define ll long long
#define mod 1000000007
#define C 0.5772156649
#define ls l,m,rt<<1
#define rs m+1,r,rt<<1|1
#define pil pair<int,ll>
#define pii pair<int,int>
#define ull unsigned long long
#define base 1000000000000000000
#define fio ios::sync_with_stdio(false);cin.tie(0) using namespace std; const double g=10.0,eps=1e-;
const int N=+,maxn=+,inf=0x3f3f3f3f; int mu[N],prime[N],sum[N][];
bool mark[N];
int num[N];
void init()
{
mu[]=;
int cnt=;
for(int i=;i<N;i++)
{
if(!mark[i])prime[++cnt]=i,mu[i]=-,num[i]=;
for(int j=;j<=cnt;j++)
{
int t=i*prime[j];
if(t>N)break;
mark[t]=;
num[t]=num[i]+;
if(i%prime[j]==){mu[t]=;break;}
else mu[t]=-mu[i];
}
}
for(int i=;i<N;i++)
for(int j=i;j<N;j+=i)
sum[j][num[i]]+=mu[j/i];
for(int i=;i<N;i++)
for(int j=;j<;j++)
sum[i][j]+=sum[i][j-];
for(int i=;i<N;i++)
for(int j=;j<;j++)
sum[i][j]+=sum[i-][j];
}
int main()
{
init();
int t;
scanf("%d",&t);
while(t--)
{
int n,m,p;
scanf("%d%d%d",&n,&m,&p);
if(p>)
{
printf("%lld\n",(ll)n*m);
continue;
}
ll ans=;
for(int i=,last;i<=min(n,m);i=last+)
{
last=min(n/(n/i),m/(m/i));
ans+=(ll)(sum[last][p]-sum[i-][p])*(n/i)*(m/i);
}
printf("%lld\n",ans);
}
return ;
}
/******************** ********************/
HDU - 4746预处理莫比乌斯反演的更多相关文章
- HDU 4746 Mophues (莫比乌斯反演应用)
Mophues Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 327670/327670 K (Java/Others) Total ...
- Mophues HDU - 4746 (莫比乌斯反演)
Mophues \[ Time Limit: 10000 ms\quad Memory Limit: 262144 kB \] 题意 求出满足 \(gcd\left(a,b\right) = k\), ...
- 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 莫比乌斯反演
分析: http://blog.csdn.net/acdreamers/article/details/12871643 分析参见这一篇 http://wenku.baidu.com/view/fbe ...
- hdu 1695 GCD 莫比乌斯反演入门
GCD 题意:输入5个数a,b,c,d,k;(a = c = 1, 0 < b,d,k <= 100000);问有多少对a <= p <= b, c <= q <= ...
- hdu.5212.Code(莫比乌斯反演 && 埃氏筛)
Code Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) Total Submi ...
- HDU 1695 GCD 莫比乌斯反演
分析:简单的莫比乌斯反演 f[i]为k=i时的答案数 然后就很简单了 #include<iostream> #include<algorithm> #include<se ...
- HDU 5212 Code (莫比乌斯反演)
题意:给定上一个数组,求 析: 其中,f(d)表示的是gcd==d的个数,然后用莫比乌斯反演即可求得,len[i]表示能整队 i 的个数,可以线性筛选得到, 代码如下: #pragma comment ...
- [HDU 5608]Function(莫比乌斯反演 + 杜教筛)
题目描述 有N2−3N+2=∑d∣Nf(d)N^2-3N+2=\sum_{d|N} f(d)N2−3N+2=∑d∣Nf(d) 求∑i=1Nf(i)\sum_{i=1}^{N} f(i)∑i=1Nf ...
随机推荐
- win7查看某个端口被占用的解决方法
1.开始---->运行---->cmd,或者是window+R组合键,调出命令窗口. 2.输入命令:netstat -ano,列出所有端口的情况.在列表中我们观察被占用的端口,比如是491 ...
- java获取当前路径&读取当前目录下文件
项目目录如下: test1.class中读取test.txt import java.io.*; import java.util.Scanner; public class Test1 { publ ...
- 微信js分享朋友圈(一)
1.绑定域名 先登录微信公众平台进入“公众号设置”的“功能设置”里填写“JS接口安全域名”. 备注:登录后可在“开发者中心”查看对应的接口权限. 2.引入js文件 <script type=&q ...
- Linux下如何安装Anaconda?
下载 从https://repo.continuum.io/archive/index.html上下载对应版本的Anaconda. 或者到官网:https://www.anaconda.com/dow ...
- 流畅的python 14章可迭代的对象、迭代器 和生成器
可迭代的对象.迭代器和生成器 迭代是数据处理的基石.扫描内存中放不下的数据集时,我们要找到一种惰性获取数据项的方式,即按需一次获取一个数据项.这就是迭代器模式(Iterator pattern). 迭 ...
- 初级学IP地址
IP地址是我们上网的凭证!通过IP地址的学习.能够对网络拓扑结构有一个简单的认识,以及对网络的传递过程进行初步了解. 传输数据简单认识 网络中传播的数据是以数据包的形式存在的! 当中包括着目的IP地址 ...
- Python基础教程-Dict和Set
Python的dict Python内置了字典:dict全称dictionary,在其他语言中也称为map,使用键-值(key-value)存储,具有极快的查找速度. 比如,要根据同学的名字查找对应的 ...
- GIL解释器,协程,gevent模块
GIL解释器锁 在Cpython解释器中,同一个进程下开启的多线程,同一时刻只能有一个线程执行,无法利用多核优势 首先需要明确的一点是GIL并不是Python的特性,它是在实现Python解析器(CP ...
- URAL - 1902 Neo-Venice
题目: Mars was the first planet colonized by humans. After a long terraforming process its appearance ...
- netty5----心跳
netty3心跳: package com.heart; import java.net.InetSocketAddress; import java.util.concurrent.Executor ...