HDU 1695 GCD (莫比乌斯反演模板)
GCD
Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 17212 Accepted Submission(s): 6637
Problem Description
Given 5 integers: a, b, c, d, k, you're to find x in a...b, y in c...d that GCD(x, y) = k. GCD(x, y) means the greatest common divisor of x and y. Since the number of choices may be very large, you're only required to output the total number of different number pairs.
Please notice that, (x=5, y=7) and (x=7, y=5) are considered to be the same.
Yoiu can assume that a = c = 1 in all test cases.
Input
The input consists of several test cases. The first line of the input is the number of the cases. There are no more than 3,000 cases.
Each case contains five integers: a, b, c, d, k, 0 < a <= b <= 100,000, 0 < c <= d <= 100,000, 0 <= k <= 100,000, as described above.
Output
For each test case, print the number of choices. Use the format in the example.
Sample Input
2
1 3 1 5 1
1 11014 1 14409 9
Sample Output
Case 1: 9
Case 2: 736427
Hint
For the first sample input, all the 9 pairs of numbers are (1, 1), (1, 2), (1, 3), (1, 4), (1, 5), (2, 3), (2, 5), (3, 4), (3, 5).
题解:
题意是求满足1<=x<=b和1<=y<=d的gcd(x,y)=k的(x,y)有多少对,可以转化为求1<=x<=b/k和1<=y<=d/k的gcd(x,y)=1的(x,y)有多少对,可以用到莫比乌斯反演解决,证明链接https://blog.csdn.net/outer_form/article/details/50588307
这里运用到第二个式子:
为满足
且
和
的
的对数
为满足
且
和
的
的对数
那么,一个数对x,y要满足它们的gcd是i的倍数,则x和y中都必须包含i这个因子,所以F(i)=⌊N/i⌋·⌊M/i⌋。所以反演后得到
所以得到 ,因为要去重,所以后面再减去(1,b)区间的(x,y)对数的一半;
#include<iostream>
#include<string.h>
#define ll long long
using namespace std;
ll mu[100007],prime[100007];
bool mark[100007];
void getmu()
{
mu[1]=1;
ll cnt=0;
for(ll i=2;i<100007;i++){
if(!mark[i]){
prime[cnt++]=(ll)i;
mu[i]=-1;
}
for(ll j=0;j<cnt&&i*prime[j]<100007;j++){
mark[i*prime[j]]=1;
if(i%prime[j]){
mu[i*prime[j]]=-mu[i];
}else{
mu[i*prime[j]]=0;
break;
}
}
}
}
int main()
{
int T;
ll a,b,c,d,k,ans1,ans2;
getmu();
scanf("%d",&T);
for(int ca=1;ca<=T;ca++){
scanf("%lld%lld%lld%lld%lld",&a,&b,&c,&d,&k);
printf("Case %d: ",ca);
if(!k){printf("0\n");continue;}
b/=k,d/=k;
if(b>d) swap(b,d);
ans1=ans2=0;
for(ll i=1;i<=b;i++)
ans1+=mu[i]*(b/i)*(d/i);
for(ll i=1;i<=b;i++)
ans2+=mu[i]*(b/i)*(b/i);
printf("%lld\n",ans1-ans2/2);
}
return 0;
}
HDU 1695 GCD (莫比乌斯反演模板)的更多相关文章
- 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 ...
- hdu 1695 GCD 莫比乌斯
GCD Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submiss ...
- [BZOJ 2820] YY的gcd(莫比乌斯反演+数论分块)
[BZOJ 2820] YY的gcd(莫比乌斯反演+数论分块) 题面 给定N, M,求\(1\leq x\leq N, 1\leq y\leq M\)且gcd(x, y)为质数的(x, y)有多少对. ...
- HDU 1695 GCD 欧拉函数+容斥定理 || 莫比乌斯反演
GCD Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submiss ...
- HDU 1695 GCD (莫比乌斯反演)
GCD Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submiss ...
- hdu 1695: GCD 【莫比乌斯反演】
题目链接 这题求[1,n],[1,m]gcd为k的对数.而且没有顺序. 设F(n)为公约数为n的组数个数 f(n)为最大公约数为n的组数个数 然后在纸上手动验一下F(n)和f(n)的关系,直接套公式就 ...
- ●HDU 1695 GCD
题链: http://acm.hdu.edu.cn/showproblem.php?pid=1695 题解: 容斥. 莫比乌斯反演,入门题. 问题化简:求满足x∈(1~n)和y∈(1~m),且gcd( ...
- hdu1695(莫比乌斯反演模板)
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1695 题意: 对于 a, b, c, d, k . 有 x 属于 [a, b], y 属于 [c, ...
随机推荐
- Battery historian安装及使用
在介绍Battery historian之前首先来介绍一下 Android adb bugreport 工具,bugreport是什么,怎么用? android系统想要成为一个功能完备,生态繁荣的操作 ...
- 使用WPF动态显示CPU使用率
基于WPF的开源图表控件有很多,大多数都是静态图表,如果需要绘制CPU使用率这样的动态数据就显得力不从心,微软开源的DynamicDataDisplay控件弥补了这个不足,为了做个备忘,我用它来实时绘 ...
- go 多维度 Map 的数据存取
多维度 Map 的数据存取 一维情况下的 map 做存取很简单,而二维以上的情况就得小心了. 先来看一个例子: m:=make(map[string]map[string]int) c:=make ...
- Linux动态调频系统CPUFreq之一:概述【转】
转自:https://blog.csdn.net/zhangyongfeiyong/article/details/53506362 随着技术的发展,我们对CPU的处理能力提出了越来越高的需求,芯片厂 ...
- CentOS(Linux)中解决MySQL乱码
环境:CentOS 6.3.mysql5.1 Centos 6.3在上安装mysql client和server之后,出现乱码,不得不修改编码. 注意: 关于utf8和gbk的区别详细见:linux中 ...
- Mysql安装与配置调优
一.安装apt-get install mysql-server 需要设置账号密码 apt-get isntall mysql-client apt-get libmysqlclient-dev2.s ...
- 【转】Java并发编程:并发容器之CopyOnWriteArrayList
Copy-On-Write简称COW,是一种用于程序设计中的优化策略.其基本思路是,从一开始大家都在共享同一个内容,当某个人想要修改这个内容的时候,才会真正把内容Copy出去形成一个新的内容然后再改, ...
- 深度神经网络(DNN)是否模拟了人类大脑皮层结构?
原文地址:https://www.zhihu.com/question/59800121/answer/184888043 神经元 在深度学习领域,神经元是最底层的单元,如果用感知机的模型, wx + ...
- IEnumerable和IEnumerator使用
IEnumerable接口是非常的简单,只包含一个抽象的方法GetEnumerator(),它返回一个可用于循环访问集合的IEnumerator对象. IEnumerator是一个真正的集合访问器,没 ...
- windows下揪出java程序占用cpu很高的线程
背景 天天搞java,这些监控也都知道,用过,但也没往细里追究.因为也没碰见这种问题,这次还是静下来走一遍流程吧.与网上基本一致,不过我区分了下linux和windows的不一样.我感觉基本是程序写成 ...