最简真分数c语言,HihoCoder1655 : 第K小最简真分数([Offer收割]编程练习赛39)(唯一分解+容斥定理+二分)(不错的数学题)...

描述

给一个整数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

#include

#include

#include

#include

#include

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 ;

}

&lbrack;Offer收割&rsqb;编程练习赛39

公平分队 #pragma comment(linker, "/STACK:102400000,102400000") #include #includ ...

HihoCoder1656 &colon; 前缀后缀查询(&lbrack;Offer收割&rsqb;编程练习赛39)(字典树&plus;小技巧)

描述 给定一个包含N个单词的字典:{W1, W2, W3, ... WN},其中第i个单词Wi有具有一个权值Vi. 现在小Hi要进行M次查询,每次查询包含一个前缀字符串Pi和一个后缀字符串Si.他希望 ...

HihoCoder1654&colon; XY游戏(&lbrack;Offer收割&rsqb;编程练习赛39)(好久没写搜索)(已经超级简短了)

描述 如下图所示,在4x4的棋盘上有X和Y两种棋子各若干枚:O表示空格. OXXY YOOX XOOY XOXX 小Hi每次可以选择任意一枚棋子,将它移动到上下左右相邻的空格中. 小Hi想知道最少移动 ...

HihoCoder1653 &colon; 公平分队(&lbrack;Offer收割&rsqb;编程练习赛39)(贪心)

描述 小Hi和小Ho在玩一个战争游戏.游戏中2N个战斗单位,其中第i个单位的战斗力是Ai. 现在小Hi和小Ho要各选N个单位组成队伍,当然他们都希望自己队伍的总战斗力越大越好. 为了使分队更加公平,经 ...

hihocoder &lbrack;Offer收割&rsqb;编程练习赛61

[Offer收割]编程练习赛61 A:最小排列 给定一个长度为m的序列b[1..m],再给定一个n,求一个字典序最小的1~n的排列A,使得b是A的子序列. 贪心即可,b是A的子序列,把不在b中的元素, ...

hihocoder &lbrack;Offer收割&rsqb;编程练习赛4

描述 最近天气炎热,小Ho天天宅在家里叫外卖.他常吃的一家餐馆一共有N道菜品,价格分别是A1, A2, ... AN元.并且如果消费总计满X元,还能享受优惠.小Ho是一个不薅羊毛不舒服斯基的人,他希望 ...

&lbrack;Offer收割&rsqb;编程练习赛46

[Offer收割]编程练习赛46赛后题解 A.AEIOU 分析

hihocoder &lbrack;Offer收割&rsqb;编程练习赛14

A.小Hi和小Ho的礼物 谜之第1题,明明是第1题AC率比C还要低.题目是求在n个不同重量袋子选4袋,2袋给A,2袋给B,使2人获得重量相同,求问方案数. 我也是一脸懵b...o(n2)暴力枚举发现把 ...

hihocoder offer收割编程练习赛10 C 区间价值

思路: 令v[l, r](0<= l <= r < n)表示区间[l,r]的价值,则长度为n的区间的价值最少为0,最多为n*(n-1)/2.整体对价值二分,求能满足sum{v[l, ...

随机推荐

&period;NET平台机器学习资源汇总,有你想要的么?

接触机器学习1年多了,由于只会用C#堆代码,所以只关注.NET平台的资源,一边积累,一边收集,一边学习,所以在本站第101篇博客到来之际,分享给大家.部分用过的 ,会有稍微详细点的说明,其他没用过的, ...

深入浅出Mybatis系列(六)---objectFactory、plugins、mappers简介与配置

上篇文章简单看了一下TypeHandler, 本次将结束对于mybatis的配置文件的学习 ...

Linux time命令

说明:喜欢写小程序的人都特别注重自己程序的执行效率,那么在Linux上,就有一个time的命令,用于测量命令的运行时间,还可以测量内存.I/O等的使用情况. 一个程序在运行时使用的系统资源通常包括CP ...

游戏 slider

using UnityEngine; using System.Collections; public class La : MonoBehaviour { float verticalValue=0 ...

图片轮播的JS写法,通用涉及多个轮播

本代码是借鉴大神的代码分析理解后,自己改写的!有不足指出希望给为大神指点. 核心只有一个JS,里面包含了css样式. 展示效果图:

Ajax&plus;Asp&period;Net无刷新分页

1.新建解决方案,并建立四个项目BLL,DAL,Model,PagerTest,如图所示: 2.Model代码 using System; using System.Collections.Gener ...

myeclipse启动报JVM terminated&period; Exit code&equals;1

报错信息如图: 解决办法: 删除当前workspaces下文件夹,路径为:%Workspaces%/.metadata/.plugins/org.eclipse.core.runtime

J2SE知识点摘记&lpar;九&rpar;

1.         线程操作的一些方法 方法名称              方法说明 public static int activeCount()             返回线程组中目前活动的线 ...

PhoenixFD插件流体模拟——UI布局【Export】详解

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值