POJ 2773 Happy 2006 (容斥)
来源:互联网 发布:秀萝捏脸数据 编辑:程序博客网 时间:2024/06/07 13:41
题目链接:http://poj.org/problem?id=2773
题 意:给你m,k;找出第k个与m互素的数时多少。
思 路:二分加容斥,二分枚举[1,2^64]范围内所有的数x,找到1到x范围内与m不互素的数的个数y(用容斥原理)。然后用x - y,如果等于k就是结果。
对于就1到mid中有多少个与m互素的数需要用到容斥原理:
比如假设m=12;mid=13 而 12=2*2*3
那么1到mid中与m不互质的数就有2,3,4,6,8,9,10,12,
其实就是2的所有倍数,以及3的所有倍数
这样我们就 算出与1到13中与12不互素的个数为: 13/2+13/3-13/(2*3)=8;
互素的数就位13-8=5;
所以与m不互素的数其实对m进行因式分解,然后用容斥原理计算就可以了。。。
代码如下:
#include <iostream>#include <stdio.h>#include <string.h>#include <deque>#include <stdlib.h>#include <algorithm>using namespace std;#define maxn 1000010int prime[33];void init( int m )//列举m的所有素因子(即对m进行素因子分解。prime记录因子个数){ int j = 1; for( int i = 2; i*i <= m; i ++ ) if( m%i == 0 ) { prime[j++] = i; while( m%i == 0 ) {m/=i;} } if( m != 1 ) prime[j++]=m; prime[0]=j-1;//记录元素个数}int que[1<<10];int coun( int n, int m )//计算[1,n]内与m互素的数的个数---容斥定理模板{ int g = 0, sum = n; que[++g]=1; for( int i = 1; i <= prime[0]; i ++ ) { int t = g; for( int j = 1; j <= g; j ++ ){ que[++t] = que[j] * prime[i] * (-1);//减去不互素的数需乘以(-1) sum += n/que[t]; } g=t; } return sum;}int main(){ int k, m; while( scanf ( "%d %d", &m, &k ) != EOF ) { init(m); int l = 1, r = 2000000000, mid;//二分枚举 while( l <= r ) { mid = (l+r)/2; if( coun(mid,m)>=k) r = mid-1; else l = mid+1; } printf("%d\n",l); } return 0;}
0 0
- POJ 2773 Happy 2006 (容斥)
- poj 2773 Happy 2006(容斥原理)
- 【容斥原理】【poj 2773】Happy 2006
- POJ 2773 Happy 2006(容斥原理)
- POJ 2773 Happy 2006 二分+容斥
- POJ 2773 Happy 2006 (二分+容斥)
- POJ 2773 Happy 2006 [容斥原理]
- poj 2773 Happy 2006(容斥原理+二分)
- POJ 2773 Happy 2006(二分+容斥)
- POJ 2773 Happy 2006(容斥原理+二分)
- poj 2773 Happy 2006(容斥+二分)
- POJ 2773 Happy 2006 二分+容斥原理
- POJ 2773 Happy 2006 【数论,容斥原理+二分】
- [二分+容斥原理] poj 2773 Happy 2006
- [POJ 2773]Happy 2006(容斥原理+二分查找)
- POJ 2773 Happy 2006 (二分答案+容斥)
- POJ 2773 Happy 2006 (容斥原理+二分)
- POJ 2773Happy 2006 二分+容斥(入门
- Android studio百度地图定位和地图开发
- CSS3新特性整理--圆角+阴影
- 学习笔记:JAVA RMI远程方法调用简单实例
- lvs原理及三种工作模式,八种调度方法
- win7下安装myODBC和使用
- POJ 2773 Happy 2006 (容斥)
- 应用迭代更新流程和工具分享
- Deep Learning(深度学习)学习笔记整理系列之(八)
- window下配置 maven私服
- 链表检测环以及环的入口
- 跨平台(linux/win)启动线程, 并设置线程名称(便于调试)
- C++习题记录-牛客网
- TDD和BDD及DDD的解说
- Swift下拉菜单动画实现