poj2773 Happy 2006(二分+容斥)
来源:互联网 发布:易语言开发单片机 编辑:程序博客网 时间:2024/04/29 06:38
题目链接:点这里!!!!
题意:
给你两个整数m(1<=m<=1e6),k(1<=k<=1e8)。求第k个与m互质的数是多少。
题解:
直接二分+容斥。
代码:
#include<cstdio>#include<cstring>#include<iostream>#include<sstream>#include<algorithm>#include<vector>#include<bitset>#include<set>#include<queue>#include<stack>#include<map>#include<cstdlib>#include<cmath>#define PI 2*asin(1.0)#define LL long long#define pb push_back#define pa pair<int,int>#define clr(a,b) memset(a,b,sizeof(a))#define lson lr<<1,l,mid#define rson lr<<1|1,mid+1,r#define bug(x) printf("%d++++++++++++++++++++%d\n",x,x)#define key_value ch[ch[root][1]][0]C:\Program Files\Git\binconst LL MOD = 1E9+7;const LL N = 1e3+15;const int maxn = 5e5+15;const int letter = 130;const LL INF = 1e18;const double pi=acos(-1.0);const double eps=1e-10;using namespace std;inline int read(){ int x=0,f=1;char ch=getchar(); while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();} while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();} return x*f;}int x,k;int vis[N],prime[N],cnt=0;int ps[30],num;void init(){ vis[1]=1; for(int i=2;i<N;i++){ if(!vis[i]) prime[++cnt]=i; for(int j=1;j<=cnt&&i*prime[j]<N;j++){ vis[i*prime[j]]=1; if(i%prime[j]==0) break; } }}LL check(LL x){ ///[1,x] LL sum=x,ans=1,res=0; int cc=0; for(int i=1;i<(1<<num);i++){ cc=0; LL ans=1; for(int j=0;j<num;j++){ if(i&(1<<j)){ cc++; ans*=1ll*ps[j]; } } if(cc%2) res+=x/ans; else res-=x/ans; } return sum-res;}int main(){ init(); while(scanf("%d%d",&x,&k)!=EOF){ num=0; for(int i=1;i<=cnt;i++){ if(x%prime[i]==0){ while(x%prime[i]==0) x/=prime[i]; ps[num++]=prime[i]; } } if(x!=1) ps[num++]=x; LL l=1,r=INF,mid; LL flag; while(l<r){ mid=(l+r)/2; flag=check(mid); if(flag<k) l=mid+1; else r=mid; } printf("%I64d\n",r); } return 0;}/*12 4*/
0 0
- poj2773 Happy 2006 二分+容斥
- POJ2773---Happy 2006(容斥+二分)
- poj2773 Happy 2006(二分+容斥)
- POJ2773 Happy 2006【容斥原理】
- POJ2773(容斥+二分)
- POJ2773-Happy 2006
- poj2773 Happy 2006
- poj2773 Happy 2006
- 【poj2773】 Happy 2006
- POJ 2773 Happy 2006 二分+容斥
- POJ 2773 Happy 2006 (二分+容斥)
- poj2773 —— 二分 + 容斥原理 + 唯一分解定理
- POJ2773 Happy
- POJ 2773 Happy 2006 二分+容斥原理
- POJ 2773 Happy 2006 【数论,容斥原理+二分】
- [二分+容斥原理] poj 2773 Happy 2006
- poj 2773 Happy 2006(容斥原理+二分)
- Happy 2006 素数打表+容斥原理+二分+hdu
- LCD1602自定义点阵字符
- 重新学javaweb---多文件上传及文件名/位置 重编
- 构造对象与原型一
- 动态内存的学习
- 【c++】rapidjson实践
- poj2773 Happy 2006(二分+容斥)
- Spark中文手册2:Spark之一个快速的例子
- JS综合学习教程<一>
- c++第五次作业
- hint居右并光标在右
- JavaScript 查看input元素是否支持某种type JavaScript扩展
- Unity3d Android SDK接入解析(二)Unity3d Android SDK的设计与两种接入方式
- GeekBand c++學習筆記(friend的一點體悟)
- 大话Android项目中的常用技巧