POJ 2773 Happy2006 (容斥原理+二分/欧拉)
来源:互联网 发布:java ssh面试题 编辑:程序博客网 时间:2024/05/18 04:01
题目:http://poj.org/problem?id=2773
给出m,k,求和m互质的第k个数。
主要想学下容斥原理:
思路就是tmp表示<=mid有几个素数,若找的这个tmp和k相等,说明这个mid就是第k个,判if的角度,,,很迷。
那找<=mid的素数的个数就是减去不是素数的个数,然后就可以用容斥了,
容斥:减去重复的,加上多见减的,减去多加的……
比如m=12,k=5
此时mid=13,不互素:2,3,4,6,8,9,10,12
不互素的数都是质因子的指数,以2为底的6个,3的4个,减去重复多数的即2*3=6的指数2个;
DFS就是为了去重,偶数乘积是负的,奇数乘积是正的
int 是肯定不够的,别忘了改为ll;
#include<cstdio>#include<cmath>#include<iostream>#include<cstring>#include<algorithm>#define ll long longusing namespace std;const int inf=0x7fffffff;const int maxn=1001005;ll p[maxn]; //第 i 个质数bool pp[maxn]; //记录是不是质数ll d[maxn]; //记录质因子有哪些int get_prime(){ int pnum=0; for(ll i=2;i<=maxn;i++){ if(!pp[i]) p[pnum++]=i; for(ll j=0;j<pnum&&p[j]*i<=maxn;j++){ pp[p[j]*i]=1; if(i%p[j]==0) break; } } pp[0]=1; pp[1]=1; return pnum;}void dfs(ll idx,ll now_mul,ll mid,bool flag,ll j,ll &num){ if(idx>=j) return ; dfs(idx+1,now_mul,mid,flag,j,num); ll mul=now_mul*d[idx]; if(flag) num+=mid/mul; else num-=mid/mul; dfs(idx+1,mul,mid,!flag,j,num);}ll sum(ll mid,ll j){ ll num=0; //不与n互素的个数 dfs(0,1,mid,1,j,num); return mid-num;}int main(){ ll c=get_prime(); ll n,k; while(scanf("%lld%lld",&n,&k)==2){ memset(d,0,sizeof(d)); ll j=0; //小于n的质因子个数 for(ll i=0;i<c;i++){ if(n%p[i]==0){ d[j++]=p[i]; while(n%p[i]==0) n/=p[i]; } if(n==1) break; } ll ans=0; ll l=1,r=inf; while(l<=r){ ll mid=(l+r)/2; ll tmp=sum(mid,j); if(tmp==k) ans=mid; if(tmp<k) l=mid+1; else r=mid-1; } printf("%lld\n",ans); } return 0;}
阅读全文
0 0
- POJ 2773 Happy2006 (容斥原理+二分/欧拉)
- POJ 2773 happy2006 (素因子分解+容斥原理+二分)
- poj 2773 Happy2006【容斥原理】
- POJ 2773 Happy 2006 二分 and 容斥原理 or 欧拉函数
- POJ 2773 二分 +容斥原理
- poj 2773 容斥原理+二分
- poj-2773(数论+容斥原理+二分)
- poj 2154 Color (polya,欧拉函数|容斥原理)
- POJ 2773 Happy 2006 二分+容斥原理
- POJ 2773 Happy 2006 【数论,容斥原理+二分】
- poj 2773 (容斥原理 + 素数分解 + 二分)
- [二分+容斥原理] poj 2773 Happy 2006
- poj 2773 Happy 2006(容斥原理+二分)
- [POJ 2773]Happy 2006(容斥原理+二分查找)
- POJ 2773 Happy 2006 (容斥原理+二分)
- poj 2773 Happy 2006 容斥原理+筛素数+二分
- POJ 2773 Happy 2006(容斥原理+二分)
- pku2773(gcd,欧拉函数)(容斥原理+二分)
- 【UFLDL】稀疏自编码网络
- backPropagate算法实现
- 机器学习笔记(1)-KNN(K-近邻算法)
- Android 控件ScrollView嵌套标签内容显示不全解决方式
- MyEclipse中Maven build...项目控制台不输出log 没有反应
- POJ 2773 Happy2006 (容斥原理+二分/欧拉)
- 计算机视觉class1-图像处理基础
- 耀耀学院task1-task3练习总结
- 静静地坐着吧
- VxWorks启动详解
- nvidia 驱动重装踩坑之路
- Quartz全注解使用
- PS-网页制作
- 适配器的使用与字符串的转换