/**
题目:hdu4746 Mophues
链接:http://acm.hdu.edu.cn/showproblem.php?pid=4746
题意:求x,y在给定范围内gcd(x,y)分解素因子的个数<=p的对数。
(n, m, P <= 5×105. Q <=5000).
思路: f(n)表示给定范围内gcd(x,y)==n的对数。
g(n)表示给定范围内gcd(x,y)为n的倍数的对数。 f(n) = sigma[n|d]mu[d/n]*g(d) = sigma[n|d]mu[d/n]*(n/d)*(m/d) ; ans = sigma[1<=x<=min(n,m)]sigma[x|d]mu[d/x]*g(d) = sigma[1<=d<=min(n,m)](g(d)*sigma[x是d的约数]mu[d/x]); sigma[x是d的约数]mu[d/x] 是 g(d)的系数。系数可以用前缀和预处理。 但是本题要求的是gcd(x,y)的分解质因子个数<=p; 所以sigma[x是d的约数]mu[d/x]这里x不仅是d的约数,且要满足x的分解质因子个数<=p (ps:这里的x就是f(n)的n); 定义sum[d]表示 sigma[x是d的约数]mu[d/x], 那么sum[d][num]表示 sigma[x是d的约数,x的分解质因子个数为num]mu[d/x]; 然后处理sum[d][num]表示sum[d][0]~sum[d][num]的前缀和。 然后处理sum[d][num]表示sum[0][num]~sum[d][num]的前缀和。 那么就可以用除法的取值sqrt(N)级别快速计算。 */
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <set>
#include <iostream>
#include <vector>
#include <map>
using namespace std;
typedef long long LL;
#define ms(x,y) memset(x,y,sizeof x)
typedef pair<int, int> P;
const LL INF = 1e10;
const int mod = 1e9 + ;
const int maxn = 5e5 + ;
int prime[maxn], tot, not_prime[maxn];
int mu[maxn], sum[maxn][], cnt[maxn];
void mobius()
{
mu[] = ;
tot = ;
for(int i = ; i < maxn; i++){
if(!not_prime[i]){
mu[i] = -;
prime[++tot] = i;
cnt[i] = ;
}
for(int j = ; prime[j]*i<maxn; j++){
not_prime[prime[j]*i] = ;
cnt[prime[j]*i] = cnt[i]+;///cnt[i]表示i这个数分解素因子的个数。
if(i%prime[j]==){
mu[prime[j]*i] = ;
break;
}
mu[prime[j]*i] = -mu[i];
}
} for(int i = ; i < maxn; i++){
for(int j = i; j < maxn; j+=i){
sum[j][cnt[i]] += mu[j/i];
}
} for(int i = ; i < maxn; i++){
for(int j = ; j < ; j++){
sum[i][j] += sum[i][j-];
}
} for(int j = ; j < ; j++){
for(int i = ; i< maxn; i++){
sum[i][j] += sum[i-][j];
}
} }
LL solve(int n,int m,int p)
{
if(n>m) swap(n,m);
LL ans = ;
int last;
for(int i = ; i <= n; i = last+){
last = min(n/(n/i),m/(m/i));
ans += (LL)(sum[last][p]-sum[i-][p])*(n/i)*(m/i);
}
return ans;
}
int main()
{
//freopen("YYnoGCD.in","r",stdin);
//freopen("YYnoGCD.out","w",stdout);
//freopen("in.txt","r",stdin);
int n, m, p;
int T;
mobius();
cin>>T;
while(T--){
scanf("%d%d%d",&n,&m,&p);
if(p>){
printf("%lld\n",(LL)n*m); continue;
}
printf("%lld\n",solve(n,m,p));
}
return ;
}

hdu4746 Mophues 莫比乌斯的更多相关文章

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

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

  2. hdu4746 Mophues (莫比乌斯进阶)

    参考博客:https://blog.csdn.net/acdreamers/article/details/12871643 题意:满足1<=x<=n,1<=y<=m,并且gc ...

  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. HDU 4746 (莫比乌斯反演) Mophues

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

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

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

  9. hdu4746:2013杭州网络赛I 莫比乌斯反演

    题意: 有5000组询问,每组询问求有多少i,j满足i∈[1,n],j∈[1,m]且gcd(i,j)的质因子数目<=p. n,m<=500000 思路: 首先预处理出每个数的质因子数目分别 ...

随机推荐

  1. Xamarin C# Android for Visual Studio 平台安装笔记参考

    Xamarin是Mono创始人Miguel de Icaza创建的公司,旨在让开发者可以用C#编写iOS, Android, Mac应用程序,也就是跨平台移动开发. 简介 Xamarin是基于Mono ...

  2. 国内站点经常使用的一些 CDN 静态资源公共库加速服务

    web开发人员们的福利来了..旨在为大家提供更快很多其它更好的静态资源库的CDN载入库方案! CDN公共库是指将经常使用的JS库存放在CDN节点,以方便广大开发人员直接调用. 与将JS库存放在serv ...

  3. 扩展JQUERY 表单加载JSON数据

    $.fn.extend({ //表单加载json对象数据 setForm : function (jsonValue) { var obj = this; $.each(jsonValue, func ...

  4. CentOS6网卡静态IP设置

    CentOS网卡配置源文件如下:DEVICE=eth0HWADDR=00:0C:29:A8:67:46TYPE=EthernetUUID=4103d7a8-d073-4e93-ac68-e6f8496 ...

  5. C#基础视频教程3.2 常见控件类型和使用方法

    这一部分我们介绍如何使用第三方的控件,我们前面一节介绍了使用微软提供的官方控件,比较中规中矩,而且也不用担心稳定性.但是很多时候我们还是会希望用第三方的控件让自己的软件更美观,更独特. 就单纯的按钮, ...

  6. iphone系统更新 3002错误

    一:错误原因 与苹果服务器通信连接错误 二:解决 windows下:c:/windows/system32/drivers/etc 修改里面的hosts文件 去掉和apple.com相关的 三:ios ...

  7. 001-Cocos2dx-2.1.3环境搭建-windows

    图片丢失,转到:http://blog.csdn.net/whyhowwhat/article/details/51908229

  8. android6.0权限管理工具EasyPermissionUtil

    前言 android6.0開始,权限的申请发生了改变,申请变的动态化,也就是执行时权限,和iOS相仿,动态化的意思是指,在每次使用须要危急权限的方法的时候.须要检查程序是否获得了该权限的许可.动态化的 ...

  9. 使用Eclipse构建Maven项目 (step-by-step) (转收藏)

    Maven这个个项目管理和构建自动化工具,越来越多的开发人员使用它来管理项目中的jar包.本文仅对Eclipse中如何安装.配置和使用Maven进行了介绍.完全step by step. 如果觉得本文 ...

  10. 【LeetCode】89. Gray Code (2 solutions)

    Gray Code The gray code is a binary numeral system where two successive values differ in only one bi ...