#6303. 水题

内存限制 10 MiB 时间限制:1000 ms 标准输入输出

题目描述

给定正整数 n,kn, kn,k,已知非负整数 xxx 满足 n!modkx=0,求 xmaxx_{max}x​max​​ 。

输入格式

本题包含多组数据,请处理至文件末尾。

对于每组数据,共有一行,两个整数,表示 n,kn, kn,k。

输出格式

对于每组数据,输出一行,一个整数,表示 xmaxx_{max}x​max​​。

样例

输入样例

10 2
5000000000000000000 2
5000000000000000000 10000000000000

输出样例

8
4999999999999999981
96153846153846153

数据范围与提示

对于 40%40\%40% 的数据,k⩽2×107k \leqslant 2\times 10^7k⩽2×10​7​​,n⩽2×109n \leqslant 2\times 10^9n⩽2×10​9​​,数据组数 ⩽50 \leqslant 50⩽50。
对于 100%100\%100% 的数据,1<k⩽10131<k \leqslant 10^{13}1<k⩽10​13​​,1⩽n⩽5×10181 \leqslant n \leqslant 5\times 10^{18}1⩽n⩽5×10​18​​,数据组数 ⩽200\leqslant 200⩽200。

 

解题思路:

    由n!%kx=0可得:k^x必定是n!的一个约数,所以k中的质因数在$n!$肯定都存在,只是k中质因子的指数小于等于n!中的质因子的指数。

    假如我们现在已经知道了k的每个质因数及其指数:P1C1 P2C2... PmCm

    我们还知道n!的每个质因子及其指数:P1D1P2D2 ...PmDm

     那么可以得到:

      $C1*X_1<=D1$  $C_2*X_2<=D_2$ ... $C_m*X_m<=D_m$

     可以知道$$min{ X_1 X_2 ...X_m }$$便是满足条件的最大的X。

    现在将问题转换为求K和n!的质因数及其指数了。

    对于K的质因数和指数我们可以在$\sqrt{k}$的时间内求得,

而n!可以在$\log{n}*\sqrt{k}$的时间内得到。

#include<bits/stdc++.h>
using namespace std;
#define uint unsigned int
#define re register int
#define ll long long
#define INF 0x3f3f3f3f
#define maxn 5000009
#define maxm
inline ll read()
{
ll x=,f=;char ch=getchar();
while(ch<''||ch>''){if(ch=='-')f=-;ch=getchar();}
while(ch>=''&&ch<=''){x=(x<<)+(x<<)+(ll)(ch-'');ch=getchar();}
return x*f;
}
bool v[maxn];
ll prime[maxn];
ll n,m,k,ans,tot,cnt; void Prime()
{
for(int i=;i<=;i++)
{
if(!v[i])
prime[++cnt]=i;
for(int j=;j<=cnt&&i*prime[j]<=;j++)
{
v[i*prime[j]]=;
if(i%prime[j]==)
break;
}
}
}
ll Cal(ll x,ll y)
{
if(x<y)
return ;
return Cal(x/y,y)+x/y;
}
int main()
{
freopen("math.in","r",stdin);
freopen("math.out","w",stdout);
Prime();
while(scanf("%lld%lld",&n,&k)!=EOF)
{
ll ans=9e18;
for(int i=;prime[i]*prime[i]<=k;i++)
{
if(k%prime[i]==)
{
cnt=;
while(k%prime[i]==)
++cnt,k/=prime[i];
ans=min(ans,Cal(n,prime[i])/cnt);
}
}
if(k!=)
ans=min(ans,Cal(n,k));
printf("%lld\n",ans);
}
fclose(stdin);
fclose(stdout);
return ;
}

LOJ #6303. 水题 (约数 质因数)的更多相关文章

  1. Atcoder 水题选做

    为什么是水题选做呢?因为我只会水题啊 ( 为什么是$Atcoder$呢?因为暑假学长来讲课的时候讲了三件事:不要用洛谷,不要用dev-c++,不要用单步调试.$bzoj$太难了,$Topcoder$整 ...

  2. 一道cf水题再加两道紫薯题的感悟

    . 遇到一个很大的数除以另一个数时,可以尝试把这个很大的数进行,素数因子分解. . 遇到多个数的乘积与另一个数的除法时,求是否能整除,可以先求每一个数与分母的最大公约数,最后若分母数字为1,则证明可整 ...

  3. 每日一刷(2018多校水题+2016icpc水题)

    11.9 线段树 http://acm.hdu.edu.cn/showproblem.php?pid=6315 求逆序对个数 http://acm.hdu.edu.cn/showproblem.php ...

  4. #82. 【UR #7】水题生成器

    链接:http://uoj.ac/problem/82 今天是世界水日,著名的水题资源专家蝈蝈大臣向世界宣布了他的一项新发明 —— 水题生成器. 每道题目都有一个正整数的难度值.水题生成器虽然强大但是 ...

  5. 【UOJ#82】【UR #7】水题生成器(贪心)

    [UOJ#82][UR #7]水题生成器(贪心) 题面 UOJ 题解 把\(n!\)的所有约数搜出来,这个个数不会很多. 然后从大往小能选则选就好了. #include<iostream> ...

  6. HDOJ 2317. Nasty Hacks 模拟水题

    Nasty Hacks Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Tota ...

  7. ACM :漫漫上学路 -DP -水题

    CSU 1772 漫漫上学路 Time Limit: 1000MS   Memory Limit: 131072KB   64bit IO Format: %lld & %llu Submit ...

  8. ytu 1050:写一个函数,使给定的一个二维数组(3×3)转置,即行列互换(水题)

    1050: 写一个函数,使给定的一个二维数组(3×3)转置,即行列互换 Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 154  Solved: 112[ ...

  9. [poj2247] Humble Numbers (DP水题)

    DP 水题 Description A number whose only prime factors are 2,3,5 or 7 is called a humble number. The se ...

随机推荐

  1. python之OpenCv(三)---基本绘图

    opencv 提供了绘制直线.圆形.矩形等基本绘图的功能 1.绘直线 cv2.line(画布,起点坐标,终点坐标,颜色,宽度) 例如: cv2.line(image,(20,60),(300,400) ...

  2. busybox编译

    sync.c:(.text.sync_main+0x7c): undefined reference to `syncfs'Coreutils—>sync选项去掉 nsenter.c:(.tex ...

  3. div高度随浏览器窗口高度变化;

    通过实际测试,按照网上的说法通过设置html,body{height: 100%:}, 然后让div以100%继承body的高度,这种做法是错误的,必须得上级有个设置固定的高度. 原生js代码(参照网 ...

  4. .pyc是个什么 python的执行过程

    1. Python是一门解释型语言? 我初学Python时,听到的关于Python的第一句话就是,Python是一门解释性语言,我就这样一直相信下去,直到发现了*.pyc文件的存在.如果是解释型语言, ...

  5. java.util.ConcurrentModificationException异常原因及解决方法

    在java语言中,ArrayList是一个很常用的类,在编程中经常要对ArrayList进行删除操作,在使用remove方法对ArrayList进行删除操作时,报java.util.Concurren ...

  6. Python 3中bytes/string的区别

    原文:http://eli.thegreenplace.net/2012/01/30/the-bytesstr-dichotomy-in-python-3 python 3中最重要的新特性可能就是将文 ...

  7. python之使用单元测试框架unittest执行自动化测试

    Python中有一个自带的单元测试框架是unittest模块,用它来做单元测试,它里面封装好了一些校验返回的结果方法和一些用例执行前的初始化操作. 单元测试框架即一堆工具的集合. 在说unittest ...

  8. shiro登录认证

    新建maven文件create a simple project shiro.ini文件 [users] root=123456 log4j.properties log4j.rootLogger=I ...

  9. Log日志

    Log.e("tag", "错误信息");  Log.w("tag", "警告信息");  Log.i("ta ...

  10. 【转】Python3 操作符重载方法

    Python3 操作符重载方法 本文由 Luzhuo 编写,转发请保留该信息. 原文: http://blog.csdn.net/Rozol/article/details/70769628 以下代码 ...