HDU 4746 Mophues【莫比乌斯反演】
题目链接:
http://acm.hdu.edu.cn/showproblem.php?pid=4746
题意:
1≤x,y≤n , 求gcd(x,y)分解后质因数个数小于等k的(x,y)的对数。
分析:
莫比乌斯反演。
还是一个套路,我们设
f(d):满足gcd(x,y)=d且x,y均在给定范围内的(x,y)的对数。
F(d):满足d|gcd(x,y)且x,y均在给定范围内的(x,y)的对数。
显然F(x)=[n/x]∗[m/x],反演后我们得到
最直接的方法,枚举质数p,那么
这样肯定会超时。
我们令a=p∗d,那么
我们希望快速获得每个a对应的∑p|aμ(a/p),由于题目规定了最大的质因子数目,所以我们增加一维,设f[i][j]表示质因子数目小于等于j时 前i项和,根据公式计算即可。
最后我们再取个前缀和就好了。注意这里仍然使用了分段优化。
代码:
/*
-- Hdu 4746
-- Created by jiangyuzhu
-- 2016/5/30
*/
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#include <vector>
#include <queue>
#include <set>
#include <map>
#include <string>
#include <cmath>
#include <stack>
using namespace std;
typedef long long ll;
#define sa(n) scanf("%d", &(n))
#define sal(n) scanf("%I64d", &(n))
#define pl(x) cout << #x << " " << x << endl
#define mdzz cout<<"mdzz"<<endl;
const int maxn = 5e5 + 5 ;
int tot = 0;
int miu[maxn], prime[maxn], f[maxn][20 + 5];
int cnt[maxn];
bool flag[maxn];
void mobius()
{
miu[1] = 1;
tot = 0;
for(int i = 2; i < maxn; i++){
if(!flag[i]){
prime[tot++] = i;
miu[i] = -1;
cnt[i] = 1;
}
for(int j = 0; j < tot && i * prime[j] < maxn; j++){
flag[i * prime[j]] = true;
cnt[i * prime[j]] = cnt[i] + 1;
if(i % prime[j]){
miu[i * prime[j]] = -miu[i];
}
else{
miu[i * prime[j]] = 0;
break;
}
}
}
for(int i = 1; i < maxn; i++){
for(int j = i; j < maxn; j += i){
f[j][cnt[i]] += miu[j / i];
}
}
for(int i = 1; i < maxn; i++){
for(int j = 1; j < 20; j++){
f[i][j] += f[i][j - 1] ;
}
}
//前缀和
for(int i = 1; i < maxn; i++){
for(int j = 0; j < 20; j++){
f[i][j] += f[i - 1][j];
}
}
}
int main (void)
{
mobius();
int T;sa(T);
int n, m, k;
for(int kas = 1; kas <= T; kas++){
scanf("%d%d%d", &n, &m, &k);
ll ans = 0;
k = min(k, 19);
int j;
if(n > m) swap(n, m);
for(int i = 1; i <= n; i = j + 1){
j = min(n /(n / i), m / (m / i ));
ans += (n / j) * 1ll * (m / j) * (f[j][k] - f[i - 1][k]);
}
printf("%lld\n", ans);
}
return 0;
}
HDU 4746 Mophues【莫比乌斯反演】的更多相关文章
- HDU 4746 Mophues (莫比乌斯反演应用)
Mophues Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 327670/327670 K (Java/Others) Total ...
- 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 ...
- Mophues HDU - 4746 (莫比乌斯反演)
Mophues \[ Time Limit: 10000 ms\quad Memory Limit: 262144 kB \] 题意 求出满足 \(gcd\left(a,b\right) = k\), ...
- HDU - 4746预处理莫比乌斯反演
链接 求[1,n] 和 [1,m]中有多少对数的GCD的素因子个数小于等于p 直接暴力做特定超时,所以我们想办法预处理,对于p大于18(1到5e5的最大素数因子个数)的情况,每一对都满足条件,O(1) ...
- HDU 4746 Mophues(莫比乌斯反演)题解
题意: \(Q\leq5000\)次询问,每次问你有多少对\((x,y)\)满足\(x\in[1,n],y\in[1,m]\)且\(gcd(x,y)\)的质因数分解个数小于等于\(p\).\(n,m, ...
- hdu.5212.Code(莫比乌斯反演 && 埃氏筛)
Code Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) Total Submi ...
- hdu 1695 GCD 莫比乌斯反演入门
GCD 题意:输入5个数a,b,c,d,k;(a = c = 1, 0 < b,d,k <= 100000);问有多少对a <= p <= b, c <= q <= ...
- HDU 1695 GCD 莫比乌斯反演
分析:简单的莫比乌斯反演 f[i]为k=i时的答案数 然后就很简单了 #include<iostream> #include<algorithm> #include<se ...
随机推荐
- python入门:用户登录,三次错误机会
#!/usr/bin/env python # -*- coding:utf-8 -*- #用户登录,三次机会重试 #主要分为两个部分,一部分是写三次循环,一部分写用户输入 #用户登录的实现,循环3次 ...
- Verilog之语句位置
1.if语句.case语句必须放在always过程语句块中. 2.verilog的系统函数比如:\(display/\)monitor必须放在initial 过程语句块中.这点尚为理解为何,但必须这样 ...
- redis集群监控之Redis-monitor部
为了对以后有可能面临的redis集群监控做准备,这两天在准备这方面的事情,现在将其中的过程记录一下. 首先是“Ronney-Hua”的这篇文章对三中开源监控软件做了对比 文章地址:https://bl ...
- poj-1979 red and black(搜索)
Time limit1000 ms Memory limit30000 kB There is a rectangular room, covered with square tiles. Each ...
- German Collegiate Programming Contest 2018 B. Battle Royale
Battle Royale games are the current trend in video games and Gamers Concealed Punching Circles (GCPC ...
- Solution: 最近公共祖先·一 [hiho一下 第十三周]
题目1 : 最近公共祖先·一 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Ho最近发现了一个神奇的网站!虽然还不够像58同城那样神奇,但这个网站仍然让小Ho乐在其中 ...
- 制作iso文件
genisoimage -o fusionstor-yi-2017-03-08.iso(镜像名称) -v -cache-inodes -joliet-long -R -J -T -V ZS -c ...
- Centos7 安装 OwnCloud 私有云
OwnCloud 一款文件主机服务软件,就是我们平时使用的云存储,不过这是在自己主机的服务器上建立属于自己的私有云,OwnCloud 使用AGPLv3协议发布.本项目是基于PHP和SQLite,MyS ...
- python socket相关
套接字的工作流程(基于TCP和 UDP两个协议) TCP和UDP对比 TCP(Transmission Control Protocol)可靠的.面向连接的协议(eg:打电话).传输效率低全双工通信( ...
- loj2005 「SDOI2017」相关分析
鬼畜线段树--Orz Capella #include <iostream> #include <cstdio> using namespace std; int n, m, ...