描述

给一个整数N,请你求出以N为分母的最简(既约)真分数中第K小的是多少?

输入

两个整数N个K。

对于30%的数据,1 <= N <= 1000000

对于100%的数据,1 <= N <= 10000000000 且 1 <= K <= φ(N)。其中φ(N)是欧拉函数,也即1~N中与N互质的数的个数。

输出

一个整数表示答案的分子

样例输入

100 10

样例输出

23

思路:

显然和欧拉函数关系不大。。。开始思路已经很接近了。分解质因子,然后二分1到Mid中与分母不互质的有多少(容斥去重)。有想到唯一分解,但是没有想到最多可以分解为多少个,万一是上万呢?然而最多可以分解为两位数个质因子,假设有2,3,5,,,(n个),则2*3*5*....*>2^n,n=10就大的不得了。

  • 1到x有因子y的树的个数为x/y个。
  • 容斥定理去重。
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<cmath>
#include<iostream>
#include<algorithm>
using namespace std;
#define ll long long
ll a[],b[],tot;//a是因子乘积,b是代表奇偶。
ll K,N,l,r,Mid,ans;
ll prim[2],cnt;
void dfs(ll x,ll y,ll num)
{
if(y==cnt+){
if(x==) return ;
a[++tot]=x;b[tot]=num&?:-;return;
}
dfs(x*prim[y],y+,num+);
dfs(x,y+,num);
}
void divide(ll x)
{
ll y=x;
for(ll i=;i*i<=x;i++){
if(y%i==) prim[++cnt]=i;
while(y%i==&&y) y/=i;
}
if(y>) prim[++cnt]=y;//唯一分解之后的剩余,可以肯定是个质数,自己反正吧。
dfs(,,);
}
bool check(ll x)
{
ll num=;
for(int i=;i<=tot;i++){
num+=x/a[i]*b[i];
}
if(x-num>=K) return true;
return false;
}
int main()
{
scanf("%lld%lld",&N,&K);
divide(N);l=;r=;
while(l<=r){
Mid=(l+r)>>;
if(check(Mid)){
ans=Mid; r=Mid-;
}
else l=Mid+;
}
printf("%lld\n",ans);
return ;
}

最新文章

  1. js控制文本框只能输入中文、英文、数字与指定特殊符号.
  2. Spark使用实例
  3. angularjs结合d3js实现资源展示
  4. Java 中的 request 和response 区别
  5. JavaScript DOM编程艺术读书笔记(一)
  6. uploadify firefox 401
  7. hdu 1016 Prime Ring Problem(DFS)
  8. ARC 没有自动释放内存
  9. hdoj 2122 Ice_cream’s world III
  10. [ASP.NET] 图形验证码破解-以简单图形为例
  11. httpclient发送不带参数post数据
  12. 项目总结SpringMVC相关
  13. 下载的js文件本地编辑器打开中文乱码如何解决
  14. 11.QT-布局管理器(Box,Grid,Form,Stacked)
  15. chrome 无头浏览器的使用
  16. python中的optionParser模块
  17. 『CUDA C编程权威指南』第二章编程题选做
  18. Kowala协议:一组分布式,自我调节,资产跟踪特性的加密货币(二)
  19. 华为QOS原理及配置
  20. Map 与 JavaBean 的相互装换

热门文章

  1. [Java开发之路](23)装箱与拆箱
  2. 【ORACLE】ORA-27102: out of memory报错的处理
  3. dede列表页调用文章,其实是所有页面都可以调用,第一次应用sql标签
  4. js中insertAdjacentHTML的玩法
  5. 为CentOS配置网易163的yum源
  6. yii2学习笔记
  7. HashMap与 HashTable, Treemap的区别
  8. bootstrap中模态框的大小设置;
  9. python之Matplotlib 和Numpy
  10. EasyPlayer RTSP Android安卓播放器实现视频源快速切换