第k个互质数(二分 + 容斥)
描述两个数的a,b的gcd为1,即a,b互质,现在给你一个数m,你知道与它互质的第k个数是多少吗?与m互质的数按照升序排列。
- 输入
- 输入m ,k (1<=m<=1000000;1<=k<=100000000)
- 输出
- 输出第k个数。
- 样例输入
10 1
10 2
10 3
样例输出
1
3
7
首先对m进行质因数分解,求出m有哪些质因数,然后用容斥求[1, mid]内与m互质的数有多少个。
判断的时候,[1,mid]之间与m互质的数的数量 = mid - (包含一个质因子的数的个数)+ (包含2个质因子的书的个数)-(包含3个质因子的数的个数)+ (包含4个质因数的数的个数)……
#include <cstdio>
// 对n进行素因子分解, fac[0]记录因子个数;
int fac[20];
void Div(int n) {
int k = 0;
for(int i = 2; i * i <= n; ++i){
if(n % i == 0) fac[++k] = i;
while(n % i == 0) n /= i;
}
if(n > 1) fac[++k] = n;
fac[0] = k;
}
// 计算[1, n]内与m互质的数的个数
int que[1<<10];
int Count(int n, int m) {
int g = 0, sum = n;
que[++g] = 1;
for(int i = 1; i <= fac[0]; ++i){
int t = g;
for(int j = 1; j <= g; ++j){
que[++t] = que[j] * fac[i] * -1;
sum += n / que[t];
}
g = t;
}
return sum;
}
// 二分,二分枚举一个答案mid,计算[1, mid]内有多少个数与m互质,让答案与K比较;
int Binary_search(int m, int K){
int l = 1, r = 2000000000, mid;
while(l <= r){
mid = (l + r) >> 1;
if(Count(mid, m) >= K) r = mid - 1;
else l = mid + 1;
}
return l;
}
int main()
{
int m, K;
while(scanf("%d%d", &m, &K) != EOF)
{
Div(m);
int ans = Binary_search(m, K);
printf("%d\n", ans);
}
return 0;
}
第k个互质数(二分 + 容斥)的更多相关文章
- BZOJ 2440 [中山市选2011]完全平方数 二分+容斥
直接筛$\mu$?+爆算?再不行筛素数再筛个数?但不就是$\mu^2$的前缀和吗? 放...怕不是数论白学了$qwq$ 思路:二分+容斥 提交:两次(康了题解) 题解: 首先答案满足二分性质(递增), ...
- codeforces B. Friends and Presents(二分+容斥)
题意:从1....v这些数中找到c1个数不能被x整除,c2个数不能被y整除! 并且这c1个数和这c2个数没有相同的!给定c1, c2, x, y, 求最小的v的值! 思路: 二分+容斥,二分找到v的值 ...
- YYHS-分数(二分+容斥)
题目描述 KJDH是个十分善于探索的孩子,有一天他把分子分母小于等于n的最简分数列在了纸上,他想找到这些分数里第k小的数,这对于KJDH来说当然是非常轻易,但是KJDH最近多了很多妹子,他还要去找妹子 ...
- 【二分+容斥+莫比乌斯反演】BZOJ2440 完全平方数
Description 求第k个没有完全平方因子的数,k<=1e9. Solution 这其实就是要求第k个µ[i](莫比乌斯函数)不为0的数. 然而k太大数组开不下来是吧,于是这么处理. 二分 ...
- Codeforces 920G List Of Integers 二分 + 容斥
题目链接 题意 给定 \(x,p,k\),求大于 \(x\) 的第 \(k\) 个与 \(p\) 互质的数. 思路 参考 蒟蒻JHY. 二分答案 \(y\),再去 \(check\) 在 \([x,y ...
- Codeforces 920G(二分+容斥)
题意: 定义F(x,p)表示的是一个数列{y},其中gcd(y,p)=1且y>x 给出x,p,k,求出F(x,p)的第k项 x,p,k<=10^6 分析: 很容易想到先二分,再做差 然后问 ...
- poj2773(欧基里德算法 或 二分+容斥)
题目链接:https://vjudge.net/problem/POJ-2773 题意:给定m,k,求与m互质的第k个数. 思路一:利用gcd(a,b)=gcd(b*t+a,b)知道,与m互质的数是以 ...
- hdu 4135 [a,b]中n互质数个数+容斥
http://acm.hdu.edu.cn/showproblem.php?pid=4135 给定一个数n,求某个区间[a,b]内有多少数与这个数互质. 对于一个给定的区间,我们如果能够求出这个区间内 ...
- Codeforces 483B - Friends and Presents(二分+容斥)
483B - Friends and Presents 思路:这个博客写的不错:http://www.cnblogs.com/windysai/p/4058235.html 代码: #include& ...
随机推荐
- 题解-AtCoder-agc006C Rabbit Exercise
Problem AtCoder & bzoj 题意:数轴上有\(n\)个点(初始坐标均为整数),编号为\(1\)~\(n\).给出\(m\)个操作. 每个操作会选定点\(a\),然后随机在点\ ...
- 解决“错误 D8016 “/ZI”和“/Gy-”命令行选项不兼容 ”问题
在Visual Studio 2017中调试VC++6.0代码,出现该问题,解决方案如下:(1)[项目]—>[属性]—>[C/C++]—> [常规]—>[调试信息格式]—> ...
- 关于PJ 10.27
题1 : Orchestra 题意: 给你一个 n*m 的矩阵,其中有一些点是被标记过的. 现在让你求标记个数大于 k 个的二维区间个数. n.m .k 最大是 10 . 分析: part 1: 10 ...
- ThreadLocal与Synchronized区别
ThreadLocal和Synchonized都用于解决多线程并发访问他们两者的区别:synchronized是利用锁的机制,使变量或代码块在某一时该只能被一个线程访问,而ThreadLocal为每一 ...
- 转载:MySQL字段类型
原文:https://www.cnblogs.com/jennyyin/p/7895010.html 数值类型 类型 大小 范围(有符号) 范围(无符号) 用途 TINYINT 1 字节 (-128, ...
- ebs 12.1.1 单节点多用户安装
本次测试环境:操作系统 oracle linux 6.9 oracle ebs 12.1.1 192.168.20.210 erpapp1.hthorizon.com erpapp1 yum ...
- pointer & iterator
pointer: address, use operator(*) to get/set the value 1) support operator(+,-), move to next posito ...
- postgresql 触发器 更新操作
1 前言 功能需求:当一张表格某个字段变化,另一张表某个字段写入该值 2 代码 CREATE OR REPLACE FUNCTION "public"."synStatu ...
- [转]TSVNCache.exe卡死电脑的解决方法
转至于https://blog.csdn.net/gnail_oug/article/details/55506820. 正文如下: 每当打开explorer资源管理器的时候,经常卡死,换了固态硬盘还 ...
- IOS 将状态栏改为白色
1.将 View controller-based status bar appearance 删除(默认为 YES),或设置为YES 2.设置rootViewcontroller,如果为viewC ...