[hdu1695] GCD ——欧拉函数+容斥原理
题目
给定两个区间[1, b], [1, d],统计数对的个数(x, y)满足:
- \(x \in [1, b]\), \(y \in [1, d]\) ;
- \(gcd(x, y) = k\)
HDU1695
题解
我们观察式子\(gcd(x,y)=k\)
很显然,\(gcd(x/k, y/k) = 1\)
我们令b < d,令x<y(避免重复计数)
分类讨论。
- y < b
可以看出答案就是\(\sum_{i \in [1, b]} \phi(i)\)
2)\(y \in [b, d]\)
可以看出答案就是calc(b, i),calc函数就是在区间[1,b]中与i互素的个数。
怎么计算calc函数呢?
首先我们计算出i的因数,运用容斥原理。
\]
具体计算见代码。
代码
#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 ——欧拉函数+容斥原理的更多相关文章
- hdu 1695 GCD (欧拉函数+容斥原理)
GCD Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submiss ...
- HDU 1695 GCD 欧拉函数+容斥原理+质因数分解
链接:http://acm.hdu.edu.cn/showproblem.php?pid=1695 题意:在[a,b]中的x,在[c,d]中的y,求x与y的最大公约数为k的组合有多少.(a=1, a ...
- HDU 1695 GCD (欧拉函数+容斥原理)
GCD Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submiss ...
- HDU 1695 GCD(欧拉函数+容斥原理)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1695 题意:x位于区间[a, b],y位于区间[c, d],求满足GCD(x, y) = k的(x, ...
- hdu (欧拉函数+容斥原理) GCD
题目链接http://acm.hdu.edu.cn/showproblem.php?pid=1695 看了别人的方法才会做 参考博客http://blog.csdn.net/shiren_Bod/ar ...
- HDU 1695 GCD (欧拉函数,容斥原理)
GCD Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submis ...
- 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 和 ...
- BZOJ 2818: Gcd [欧拉函数 质数 线性筛]【学习笔记】
2818: Gcd Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 4436 Solved: 1957[Submit][Status][Discuss ...
- 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 ...
随机推荐
- strak组件(6):列表定制列应用和引入静态文件
效果图: 新增函数 def get_choice_text(title, field) 闭包函数,显示choice字段 def inner(self, obj=None, is_header=None ...
- Social Media Addiction【社交媒体上瘾】
Social Media Addiction Children as young as ten are becoming dependent on social media for their sen ...
- python——int()函数
1. 使用 int() 将小数转换为整数,结果是向上取整还是向下取整呢? 小数取整会采用比较暴力的截断方式,即向下取整.(注:5.5向上取整为6,向下取整为5) 2. 我们人类思维是习惯于“四舍五入” ...
- Ubuntu 16.04上安装并配置Postfix作为只发送SMTP服务器
如果大家已经在使用第三方邮件服务方案发送并收取邮件,则无需运行自己的邮件服务器.然而,如果大家管理一套云服务器,且其中安装的应用需要发送邮件通知,那么运行一套本地只发送SMTP服务器则更为理想. 如何 ...
- 11 Django组件-分页器
Django的分页器(paginator) view from django.shortcuts import render,HttpResponse # Create your views here ...
- WPF的线程模型
原文:WPF的线程模型 WPF的线程模型 周银辉 谈到多线程,很多人对其可能都不太有好感,觉得麻烦与易出错.所以我们不排除有这样的情况:假设我对“多线程”.“异步”这些字眼潜意识 ...
- Python数据类型一
一.整型 在Python内部对整数的处理分为普通整数和长整数,普通整数长度为机器位长,通常都是32位,超过这个范围的整数就自动当长整数处理,而长整数的范围几乎完全没限制Python可以处理任意大小的整 ...
- 5.0 Genymotion安装以及基础使用
后续考虑到python+appium多设备并发执行,需要多台手机,所以这里就直接更新一个jenymotion,后续多设备执行直接用真机+模拟器操作!Genymotion第一步:百度搜索[Genymot ...
- HA集群基本概念详解
一.高可用集群的定义 二.高可用集群的衡量标准 三.高可用集群的层次结构 四.高可用集群的分类 五.高可用集群常用软件 六.共享存储 七.集群文件系统与集群LVM 八.高可用集群的工作原理 一.高可用 ...
- windows下vim高亮systemverilog
主要解决window环境下,vim高亮systemverilog的方法. 第一步:准备材料下载地址:https://files.cnblogs.com/files/aslmer/verilog_sys ...