题目链接:https://cn.vjudge.net/problem/HDU-1695#author=541607120101

感觉讲的很好的一个博客:https://www.cnblogs.com/peng-ym/p/8647856.html

今天刚开始学莫比乌斯反演,先据我所了解的说一下。

首先是莫比乌斯函数

1,mu(x).当x为1时,mu(1)等于1。

2,当x为素数时,mu(x)=-1。

3,当x能唯一分解成多个不同的素数相乘的时候(不能有重复的素数)mu(x)=(-1)的k次方,k代表的是素数的个数。

4,当x不能被唯一的分解成多个素数相乘的时候,也就是他的因子中存在重复的素数,这个时候,mu(x)=0.

然后是一个等式 (d是n的因子).

然后就是两个等式(等我学会证明就回来补~)

然后对于当前这个题,选择(1,b),(1,d) 中满足gcd(x,y)==k的对数,(1<=x<=b),(1<=y<=d) .

也就是说 gcd(x/k,y.k)==1满足的对数.

然后再开始分析一波:

我们令f(k)为满足(a,b),(c,d)中的gcd为k的对数.然后F(k)就是满足(a,b),(c,d)中的gcd为k的倍数的对数.

F(k)就等于(b/k)*(d/k).

所以说,这个题就转换为了求满足的总和

但是要注意去重.我们一开始定义的是ans=f(1)( (1<=x<=b) &&(1<=y<=c) )中的解,但是很明显,(1.c)包含(1,b),所以这一块会有重复的计算( (1<=x<=b)&&(1<=x<=b) ),并且(t1,t2)和(t2,t1)在(1,b)这块区域,是应当被看做一组的,所以最终结果应该是

ans=f ( (1,b) , (1,c) )-f ( (1,b) , (1,b) ) / 2.

AC代码:

#include<iostream>
#include<cmath>
#include<string>
#include<algorithm>
#include<cstring>
#include<stdio.h>
using namespace std;
# define ll long long
# define inf 0x3f3f3f3f
const int maxn =100000+100;
# define ll long long
ll mu[maxn];
ll vis[maxn];
ll prim[maxn];
void Get_mu(ll n)
{
mu[1]=1;
int cnt=0;
for(ll i=2; i<n; i++)
{
if(!vis[i])
{
prim[cnt++]=i;
mu[i]=-1;
}
for(ll j=0; j<cnt; j++)
{
ll k=i*prim[j];
if(k>n)break;
vis[k]=1;
if(i%prim[j])
{
mu[k]=-mu[i];
}
else
{
mu[k]=0;
break;
}
}
}
}
int main()
{
Get_mu(maxn);
ll t;
ll Case=0;
scanf("%lld",&t);
while(t--)
{
ll a,b,c,d,k;
scanf("%lld %lld %lld %lld %lld",&a,&b,&c,&d,&k);
if(k==0)
{
printf("Case %lld: 0\n",++Case);
continue;
}
b/=k;
d/=k;
ll ans=0,res=0;
ll minn=min(b,d);
for(ll i=1; i<=minn; i++)
{
ans+=mu[i]*(b/i)*(d/i);
res+=mu[i]*(minn/i)*(minn/i);
}
// cout<<ans<<" "<<res<<endl;
printf("Case %lld: %lld\n",++Case,ans-res/2);
}
return 0;
}

GCD HDU - 1695 莫比乌斯反演入门的更多相关文章

  1. HDU 1695 (莫比乌斯反演) GCD

    题意: 从区间[1, b]和[1, d]中分别选一个x, y,使得gcd(x, y) = k, 求满足条件的xy的对数(不区分xy的顺序) 分析: 虽然之前写过一个莫比乌斯反演的总结,可遇到这道题还是 ...

  2. hdu 1695(莫比乌斯反演)

    GCD Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submiss ...

  3. D - GCD HDU - 1695 -模板-莫比乌斯容斥

    D - GCD HDU - 1695 思路: 都 除以 k 后转化为  1-b/k    1-d/k中找互质的对数,但是需要去重一下  (x,y)  (y,x) 这种情况. 这种情况出现 x  ,y ...

  4. 【CJOJ2512】gcd之和(莫比乌斯反演)

    [CJOJ2512]gcd之和(莫比乌斯反演) 题面 给定\(n,m(n,m<=10^7)\) 求 \[\sum_{i=1}^n\sum_{j=1}^mgcd(i,j)\] 题解 首先把公因数直 ...

  5. hdu 1695 GCD 莫比乌斯反演入门

    GCD 题意:输入5个数a,b,c,d,k;(a = c = 1, 0 < b,d,k <= 100000);问有多少对a <= p <= b, c <= q <= ...

  6. HDU - 4675 GCD of Sequence (莫比乌斯反演+组合数学)

    题意:给出序列[a1..aN],整数M和k,求对1-M中的每个整数d,构建新的序列[b1...bN],使其满足: 1. \(1 \le bi \le M\) 2. \(gcd(b 1, b 2, -, ...

  7. 数学--数论--HDU 4675 GCD of Sequence(莫比乌斯反演+卢卡斯定理求组合数+乘法逆元+快速幂取模)

    先放知识点: 莫比乌斯反演 卢卡斯定理求组合数 乘法逆元 快速幂取模 GCD of Sequence Alice is playing a game with Bob. Alice shows N i ...

  8. BZOJ 2301 莫比乌斯反演入门

    2301: [HAOI2011]Problem b Description 对于给出的n个询问,每次求有多少个数对(x,y),满足a≤x≤b,c≤y≤d,且gcd(x,y) = k,gcd(x,y)函 ...

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

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

随机推荐

  1. LoadRunner脚本增强技巧之参数化(一)

    参数化的方式有两种,一种通过File引入参数值,一种通过数据库引入参数值.本篇介绍File方式引入参数值. 一.File方式参数化过程 1.在脚本中找到需要做参数化的字符串,选中,右键点击,选择Rep ...

  2. Java虚拟机内存模型和volatile型变量

    Java虚拟机内存模型 了解Java虚拟机的内存模型,有助于我们明白为什么会发生线程安全问题. 上面这幅图是<深入理解Java虚拟机-JVM高级特性与最佳实践>的书中截图. 线程共享的变量 ...

  3. xshell代理设置

    1.宿主机设置隧道 上面的端口随意,不与本机使用的端口重合即可,下面的端口是管理系统的端口 2.宿主机上面创建的虚机设置代理 3.怎么通过web浏览器直接登录虚机ip网址:https://blog.c ...

  4. BZOJ4919 大根堆(动态规划+treap+启发式合并)

    一个显然的dp是设f[i][j]为i子树内权值<=j时的答案,则f[i][j]=Σf[son][j],f[i][a[i]]++,f[i][a[i]+1~n]对其取max.这样是可以线段树合并的, ...

  5. Class类是什么? Class.forName()是干什么的?

    Class类概念 Class类用来描述一个类的结构,比如描述一个类有哪些成员,有哪些方法等.有多种方法可以获取一个类对应的Class类实例,比如: //第一种方式获取描述Dog类结构的Class类实例 ...

  6. Best Reward HDU - 3613(马拉车+枚举+前缀和)

    题意: 给你一串字符串,每个字符都有一个权值,要求把这个字符串在某点分开,使之成为两个单独的字符串 如果这两个子串某一个是回文串,则权值为那一个串所有的字符权值和 若不是回文串,则权值为0 解析: 先 ...

  7. Repository HDU - 2846 (trie)

    题中没给范围 所以控制不好数组范围..不是超内存就是runtime.. 好吧 到了晚上终于调出来数组模拟的了 题意: 求含有某字符段的个数 解析: 把每个字符串遍历一遍 以每个元素为起点建树就好了.. ...

  8. 【BZOJ1562】【NOI2009】变换序列(二分图匹配)

    [BZOJ1562][NOI2009]变换序列 题面 BZOJ 洛谷 这题面写的是真的丑,还是先手动翻译成人话. 让你构造一个\(0..N-1\)的排列\(T\) 使得\(Dis(i,T_i)\)为给 ...

  9. springboot缓存开发

    前言:缓存在开发中是一个必不可少的优化点,近期在公司的项目重构中,关于缓存优化了很多点,比如在加载一些数据比较多的场景中,会大量使用缓存机制提高接口响应速度,简介提升用户体验.关于缓存,很多人对它都是 ...

  10. Java Socket UDP编程

    package com; import java.io.IOException; import java.net.*; /** * UDP Client * * Created by Administ ...