题目

给定两个区间[1, b], [1, d],统计数对的个数(x, y)满足:

  1. \(x \in [1, b]\), \(y \in [1, d]\) ;
  2. \(gcd(x, y) = k\)

    HDU1695

题解

我们观察式子\(gcd(x,y)=k\)

很显然,\(gcd(x/k, y/k) = 1\)

我们令b < d,令x<y(避免重复计数)

分类讨论。

  1. y < b

    可以看出答案就是\(\sum_{i \in [1, b]} \phi(i)\)

    2)\(y \in [b, d]\)

    可以看出答案就是calc(b, i),calc函数就是在区间[1,b]中与i互素的个数。

怎么计算calc函数呢?

首先我们计算出i的因数,运用容斥原理。

\[| \overline{A_1} \cap \overline {A_2} ... \cap \overline{A_n}| = | S | - |A_1| - |A_2| ... + |A_1 \cap A_2| ....
\]

具体计算见代码。

代码

#include <bits/stdc++.h>
#define ll long long
using namespace std;
const int maxn = 100000;
int prime[maxn+5], phi[maxn+5], check[maxn+5];
int T, a, b, c, d, k;
int cnt = 0;
void get_phi(int n) {
memset(check, 0, sizeof(check));
cnt = 0;
phi[1] = 1;
for(int i = 2; i <= n; i++) {
if(!check[i]) {
phi[i] = i-1;
prime[cnt++] = i;
}
for(int j = 0; j < cnt; j++) {
if(i * prime[j] > n) break;
check[i*prime[j]] = 1;
if(i % prime[j] == 0) {
phi[i * prime[j]] = phi[i] * prime[j];
break;
} else {
phi[i * prime[j]] = phi[i] * (prime[j] - 1);
}
}
}
}
ll factor[maxn];
int ct = 0;
void get_factor(int x) {
ct = 0;
ll tmp = x;
for(int i = 0; prime[i] * prime[i] <= x; i++) {
if(tmp % prime[i] == 0) {
factor[ct] = prime[i];
while(tmp % prime[i] == 0) {
tmp /= prime[i];
}
ct++;
}
}
if(tmp != 1)
factor[ct++] = tmp; } int calc(int n, int m) {
get_factor(m);
int ans = 0;
for(int i = 1; i < (1 << ct); i++) {
int cnt = 0;
int tmp = 1;
for(int j = 0; j < ct; j++) {
if(i & (1 << j)) {
cnt++;
tmp *= factor[j];
}
}
if(cnt & 1) ans += n / tmp;
else ans -= n/tmp;
}
return n - ans;
} int main() {
//freopen("input", "r", stdin);
scanf("%d", &T);
get_phi(maxn);
int kase = 0;
while(T--) {
kase++;
scanf("%d %d %d %d %d", &a, &b, &c, &d, &k);
if((k == 0) | (k > b) | (k > d)) {
printf("Case %d: 0\n", kase);
continue;
}
if(b > d) swap(b, d);
b /= k;
d /= k;
ll ans = 0;
for(int i = 1; i <= b; i++) ans += phi[i];
for(int i = b+1; i <= d; i++)
ans += calc(b, i);
printf("Case %d: %lld\n", kase, ans);
}
return 0;
}

[hdu1695] GCD ——欧拉函数+容斥原理的更多相关文章

  1. hdu 1695 GCD (欧拉函数+容斥原理)

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

  2. HDU 1695 GCD 欧拉函数+容斥原理+质因数分解

    链接:http://acm.hdu.edu.cn/showproblem.php?pid=1695 题意:在[a,b]中的x,在[c,d]中的y,求x与y的最大公约数为k的组合有多少.(a=1, a ...

  3. HDU 1695 GCD (欧拉函数+容斥原理)

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

  4. HDU 1695 GCD(欧拉函数+容斥原理)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1695 题意:x位于区间[a, b],y位于区间[c, d],求满足GCD(x, y) = k的(x, ...

  5. hdu (欧拉函数+容斥原理) GCD

    题目链接http://acm.hdu.edu.cn/showproblem.php?pid=1695 看了别人的方法才会做 参考博客http://blog.csdn.net/shiren_Bod/ar ...

  6. HDU 1695 GCD (欧拉函数,容斥原理)

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

  7. HDU 1695 GCD 欧拉函数+容斥定理

    输入a b c d k求有多少对x y 使得x在a-b区间 y在c-d区间 gcd(x, y) = k 此外a和c一定是1 由于gcd(x, y) == k 将b和d都除以k 题目转化为1到b/k 和 ...

  8. BZOJ 2818: Gcd [欧拉函数 质数 线性筛]【学习笔记】

    2818: Gcd Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 4436  Solved: 1957[Submit][Status][Discuss ...

  9. POJ 2773 Happy 2006【GCD/欧拉函数】

    根据欧几里德算法,gcd(a,b)=gcd(a+b*t,b) 如果a和b互质,则a+b*t和b也互质,即与a互质的数对a取模具有周期性. 所以只要求出小于n且与n互质的元素即可. #include&l ...

随机推荐

  1. strak组件(6):列表定制列应用和引入静态文件

    效果图: 新增函数 def get_choice_text(title, field) 闭包函数,显示choice字段 def inner(self, obj=None, is_header=None ...

  2. Social Media Addiction【社交媒体上瘾】

    Social Media Addiction Children as young as ten are becoming dependent on social media for their sen ...

  3. python——int()函数

    1. 使用 int() 将小数转换为整数,结果是向上取整还是向下取整呢? 小数取整会采用比较暴力的截断方式,即向下取整.(注:5.5向上取整为6,向下取整为5) 2. 我们人类思维是习惯于“四舍五入” ...

  4. Ubuntu 16.04上安装并配置Postfix作为只发送SMTP服务器

    如果大家已经在使用第三方邮件服务方案发送并收取邮件,则无需运行自己的邮件服务器.然而,如果大家管理一套云服务器,且其中安装的应用需要发送邮件通知,那么运行一套本地只发送SMTP服务器则更为理想. 如何 ...

  5. 11 Django组件-分页器

    Django的分页器(paginator) view from django.shortcuts import render,HttpResponse # Create your views here ...

  6. WPF的线程模型

    原文:WPF的线程模型 WPF的线程模型            周银辉 谈到多线程,很多人对其可能都不太有好感,觉得麻烦与易出错.所以我们不排除有这样的情况:假设我对“多线程”.“异步”这些字眼潜意识 ...

  7. Python数据类型一

    一.整型 在Python内部对整数的处理分为普通整数和长整数,普通整数长度为机器位长,通常都是32位,超过这个范围的整数就自动当长整数处理,而长整数的范围几乎完全没限制Python可以处理任意大小的整 ...

  8. 5.0 Genymotion安装以及基础使用

    后续考虑到python+appium多设备并发执行,需要多台手机,所以这里就直接更新一个jenymotion,后续多设备执行直接用真机+模拟器操作!Genymotion第一步:百度搜索[Genymot ...

  9. HA集群基本概念详解

    一.高可用集群的定义 二.高可用集群的衡量标准 三.高可用集群的层次结构 四.高可用集群的分类 五.高可用集群常用软件 六.共享存储 七.集群文件系统与集群LVM 八.高可用集群的工作原理 一.高可用 ...

  10. windows下vim高亮systemverilog

    主要解决window环境下,vim高亮systemverilog的方法. 第一步:准备材料下载地址:https://files.cnblogs.com/files/aslmer/verilog_sys ...