hdu 4746 Mophues
莫比乌斯反演。先初始化出所有数有多少个质因子和mobius。然后处理mob_sum[ i ][ j ],表示当公因子的因子个数小于等于 j 个的mobius前 i 项和。然后分块求和即可。
分块处理部分见(不会莫比乌斯反演的同学也可以去这里学一下)http://wenku.baidu.com/view/fbe263d384254b35eefd34eb.html。
#include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdio>
#include<cmath>
#define LL long long
#define CLR(a, b) memset(a, b, sizeof(a)) using namespace std;
const int N = 500100; bool isp[N];
int p[N], cnt[N], mob[N];
int mob_sum[N][20]; #define mbs mob_sum void Mobius()
{
CLR(isp, 0);CLR(cnt, 0);
int tot = 0;mob[1] = 1;
for(int i = 2; i < N; i ++)
{
if(!isp[i])
{
p[tot ++] = i;
mob[i] = -1;cnt[i] = 1;
}
for(int j = 0; j < tot && p[j] * i < N; j ++)
{
isp[p[j] * i] = true;
cnt[i * p[j]] = cnt[i] + 1;
if(i % p[j] == 0)
{
mob[p[j] * i] = 0;
break;
}
else
{
mob[p[j] * i] = -mob[i];
}
}
}
} void init()
{
Mobius();CLR(mbs, 0);
for(int i = 1; i < N; i ++)//求出单项的mbs[i][j],表示的是i为公因子时的情况。
for(int j = i; j < N; j += i)
{
mbs[j][cnt[i]] += mob[j / i];
}//以下是求前缀和。
for(int i = 1; i < N; i ++)
for(int j = 0; j < 19; j ++)
{
mbs[i][j] += mbs[i - 1][j];
}
for(int i = 0; i < N; i ++)
for(int j = 1; j < 19; j ++)
{
mbs[i][j] += mbs[i][j - 1];
}
} int main()
{
//freopen("input.txt", "r", stdin);
int q, n, m, p;LL ans;
init();scanf("%d", &q);
while(q --)
{
scanf("%d%d%d", &n, &m, &p);
if(p >= 19) {printf("%I64d\n", (LL)n * m); continue;}
if(n > m) swap(n, m);
ans = 0;
for(int i = 1, j = 1; i < n; i = j + 1)
{
j = min(n / (n / i), m / (m / i));
ans += (LL)(mbs[j][p] - mbs[i - 1][p]) * (n / i) * (m / i);
}
printf("%I64d\n", ans);
}
}
hdu 4746 Mophues的更多相关文章
- HDU 4746 Mophues【莫比乌斯反演】
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=4746 题意: 1≤x,y≤n , 求gcd(x,y)分解后质因数个数小于等k的(x,y)的对数. 分 ...
- 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 ...
- HDU 4746 Mophues(莫比乌斯反演)
题意:求\(1\leq i \leq N,1\leq j \leq M,gcd(i,j)\)的质因子个于等于p的对数. 分析:加上了对质因子个数的限制. 设\(f(d):[gcd(i,j)=d]\) ...
- HDU 4746 Mophues(莫比乌斯反演)题解
题意: \(Q\leq5000\)次询问,每次问你有多少对\((x,y)\)满足\(x\in[1,n],y\in[1,m]\)且\(gcd(x,y)\)的质因数分解个数小于等于\(p\).\(n,m, ...
- HDU 4746 HDOJ Mophues 2013杭州网赛I题
比赛的时候就预感到这题能出,但是会耗时比较多.结果最后是出了,但是有更简单的题没出. 是不是错误的决策呢?谁知道呢 题目意思: 定义f(x) = x分解质因数出来的因子个数 如 x = p0 * p0 ...
- Mophues HDU - 4746 (莫比乌斯反演)
Mophues \[ Time Limit: 10000 ms\quad Memory Limit: 262144 kB \] 题意 求出满足 \(gcd\left(a,b\right) = k\), ...
- HDU 4746 (莫比乌斯反演) Mophues
这道题看巨巨的题解看了好久,好久.. 本文转自hdu4746(莫比乌斯反演) 题意:给出n, m, p,求有多少对a, b满足gcd(a, b)的素因子个数<=p,(其中1<=a<= ...
随机推荐
- hdu1074 Doing Homework(状态压缩DP Y=Y)
Doing Homework Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) T ...
- [转] JS nodeType返回类型
将HTML DOM中几个容易常用的属性做下记录: nodeName.nodeValue 以及 nodeType 包含有关于节点的信息. nodeName 属性含有某个节点的名称. 元素节点的 node ...
- ajax的来龙去脉
这是我在博客园写的第一遍博客,之前都是只看不写,在园子里学到了不少的东西,现在也想着把自己的一些感悟写出来给大家分享一下. ajax技术可以说是Web2.0应用程序的技术基础,尽管软件经销商和开源社区 ...
- spring01
spring的体系结构图 第一个spring入门例子 01.创建一 ...
- noip 2012 开车旅行
/*考场上写的暴力 40分钟70分*/ #include<iostream> #include<cstdio> #include<cstring> #define ...
- C#总结项目《影院售票系统》编写总结三
昨天总结了动态绘制控件.票类型的切换以及数据在窗体中的展现.今天继续总结,自己喜欢的就去做吧,让别人说去吧,省的自己再留下什么后悔遗憾,噢耶,加油! 今天总结项目中最核心的部分--购票.座位颜色状态的 ...
- 使用linux操作系统的公司服务器有哪些品牌
服务器硬件是什么牌子的? 操心系统有哪些?cpu是哪些?
- MVC bundles
Bundles用于打包CSS和javascript脚本文件,优化对它们的组织管理.显示模式则允许我们为不同的设备显示不同的视图. 减少请求数量和带宽,当然在开发调试时一般不开启.
- 手机Web网站,设置拒绝电脑访问
最近一段时间,都在使用Jquery-Mobile + MVC做手机Web,有一些心得.体会 下面介绍如何拒绝电脑访问手机网站 电脑的浏览器,跟手机的浏览器内核不一样,这是我设置拒绝访问的思路. 下面是 ...
- java.lang.NumberFormatException: empty String 错误
原因:前台获取的字符串,后台类型转换,与之对应的实体类中却是Integer类型,所以会报错. 排错情况:1.先检查数据库与实体类中的类型是否一致 2.检查类型转换代码,如果需要加入异常处理