POJ 2773 Happy 2006(二分+容斥)
2015-09-12 00:03
459 查看
Description
Two positive integers are said to be relatively prime to each other if the Great Common Divisor (GCD) is 1. For instance, 1, 3, 5, 7, 9...are all relatively prime to 2006.
Now your job is easy: for the given integer m, find the K-th element which is relatively prime to m when these elements are sorted in ascending order.
Input
The input contains multiple test cases. For each test case, it contains two integers m (1 <= m <= 1000000), K (1 <= K <= 100000000).
Output
Output the K-th element in a single line.
Sample Input
Sample Output
分析:问你和n互斥的第k个数其实直接二分就行了
Two positive integers are said to be relatively prime to each other if the Great Common Divisor (GCD) is 1. For instance, 1, 3, 5, 7, 9...are all relatively prime to 2006.
Now your job is easy: for the given integer m, find the K-th element which is relatively prime to m when these elements are sorted in ascending order.
Input
The input contains multiple test cases. For each test case, it contains two integers m (1 <= m <= 1000000), K (1 <= K <= 100000000).
Output
Output the K-th element in a single line.
Sample Input
2006 1 2006 2 2006 3
Sample Output
1 3 5
分析:问你和n互斥的第k个数其实直接二分就行了
#include<cstdio> #include<cstring> #include<algorithm> #include<vector> #include<string> #include<iostream> #include<queue> #include<cmath> #include<map> #include<stack> #include<set> using namespace std; #define REPF( i , a , b ) for ( int i = a ; i <= b ; ++ i ) #define REP( i , n ) for ( int i = 0 ; i < n ; ++ i ) #define CLEAR( a , x ) memset ( a , x , sizeof a ) const int INF=0x3f3f3f3f; typedef long long LL; LL n,k; int v[10],m; LL solve(LL x) { LL sum=0; for(int i=1;i<(1<<m);i++) { LL c=0,s=1; for(int j=0;j<m;j++) { if(i&(1<<j)) { s=s*v[j]; c++; } } if(c&1) sum+=x/s; else sum-=x/s; } return x-sum; } int main() { while(~scanf("%d%d",&n,&k)) { m=0; for(int i=2;i*i<=n;i++) { if(n%i==0) { while(n%i==0) n/=i; v[m++]=i; } } if(n>1) v[m++]=n; LL l=1,r=1e18; while(l<=r) { LL mid=(l+r)>>1; if(solve(mid)>=k) r=mid-1; else l=mid+1; } printf("%lld\n",l); } return 0; }
相关文章推荐
- Android插件化学习
- 【Android实战项目】Odoo 邮箱客户端的经历
- Android 自定义Dialog 实现类似ios7 UIAlertView
- iOS 的几种传值方法
- Android 一个简单的计算器APP
- 关于iOS打印NSDictionary中文字符出现乱码
- Android中图形与图像处理初见面——绘图
- Android动画插入器
- Android-自定义日历控件
- Android滑动选择的日期选择框
- 记在学习swift语言进行iOS开发前
- Android四大组件-ContentProvider
- 【Android杂谈】关于Adapter的理解
- Android 学习第13课,android 实现发送短信的功能
- Lecture1-3Applications of ML
- IOS开发指南学习——XML解析
- iOS lipo 判断静态库是否支持64位
- Android WallpaperManager解析及BUG解决
- Things That Cannnot Change(Android里不能改变的东西)
- Android中事件传递机制的总结