[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 ...
随机推荐
- php正则 与 js正则
PHP中的正则表达式函数 在PHP中有两套正则表达式函数库.一套是由PCRE(Perl Compatible Regular Expression)库提供的.PCRE库使用和Perl相同的语法规则实现 ...
- vim+软件安装——06
vim在命令模式下的操作: 1.上下左右键可以自由走动 2.l 键 光标向右移动一个位置 3.h键 光标向左移动一个位置 4.j键 光标向下移动一行 5.k键 光标向上移动一行 6.^键 光标移动到当 ...
- 零基础学css
选择器:标签选择器.id选择器.类选择器 ---------------------------------------------------------------------------- 标签 ...
- Hibernate---实体类注释简介
1.类级别注解 @Entity:映射实体类 @Entity(name="tableName") - 必须,注解将一个类声明为一个实体bean. 属性: name - 可选,对应数据 ...
- zedboard烧写SD卡启动linux镜像
1. 先把SD卡格式化,然后把镜像文件拷贝到SD卡,下面应该是没有文件系统的 2. 插上SD卡,Zedboard设置启动模式,有5个跳线帽,配置如下,上电启动 3. 看下串口的输出
- 玩转Node.js(三)
玩转Node.js(三) 上一节对于Nodejs的HTTP服务进行了较为详细的解析,而且也学会了将代码进行模块化,模块化以后每个功能都在单独的文件中,有利于代码的维护.接下来,我们要想想如何处理不同的 ...
- C/C++学习笔记--指针(Pointer)
定义指针 一般类型: type_name * var_name; 例如: int _var = 1555; int * _var_addr=&_var; 一般类型数组类:type_name ...
- katalon系列二:selenium IDE的替代者——Katalon Recorder
Katalon Recorder是和selenium IDE一样的一个浏览器插件,可以录制web上的操作并回放,但我个人感觉Katalon Recorder更好用.大家可以直接在chrome商店下载安 ...
- selenium IDE录制
一. 安装 可以用Firefox打开https://addons.mozilla.org/en-US/firefox/addon/selenium-ide/,在这里边找到和当前firef ...
- Linux静态ip设置及一些网络设置
网络服务配置文件 /etc/sysconfig/network 网络接口配置文件 /etc/sysconfig/network-scripts/ifcfg-INTERFACE_NAME 修改IP永久生 ...