LOJ #6303. 水题 (约数 质因数)
#6303. 水题
内存限制 10 MiB 时间限制:1000 ms 标准输入输出
题目描述
给定正整数 n,kn, kn,k,已知非负整数 xxx 满足 n!modkx=0,求 xmaxx_{max}xmax 。
输入格式
本题包含多组数据,请处理至文件末尾。
对于每组数据,共有一行,两个整数,表示 n,kn, kn,k。
输出格式
对于每组数据,输出一行,一个整数,表示 xmaxx_{max}xmax。
样例
输入样例
10 2
5000000000000000000 2
5000000000000000000 10000000000000
输出样例
8
4999999999999999981
96153846153846153
数据范围与提示
对于 40%40\%40% 的数据,k⩽2×107k \leqslant 2\times 10^7k⩽2×107,n⩽2×109n \leqslant 2\times 10^9n⩽2×109,数据组数 ⩽50 \leqslant 50⩽50。
对于 100%100\%100% 的数据,1<k⩽10131<k \leqslant 10^{13}1<k⩽1013,1⩽n⩽5×10181 \leqslant n \leqslant 5\times 10^{18}1⩽n⩽5×1018,数据组数 ⩽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=0,f=1;char ch=getchar();while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}while(ch>='0'&&ch<='9'){x=(x<<1)+(x<<3)+(ll)(ch-'0');ch=getchar();}return x*f; } bool v[maxn]; ll prime[maxn]; ll n,m,k,ans,tot,cnt;void Prime() {for(int i=2;i<=3400000;i++){if(!v[i])prime[++cnt]=i;for(int j=1;j<=cnt&&i*prime[j]<=3400000;j++){v[i*prime[j]]=1;if(i%prime[j]==0)break;}} } ll Cal(ll x,ll y) {if(x<y)return 0;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=1;prime[i]*prime[i]<=k;i++){if(k%prime[i]==0){cnt=0;while(k%prime[i]==0)++cnt,k/=prime[i]; ans=min(ans,Cal(n,prime[i])/cnt);}}if(k!=1)ans=min(ans,Cal(n,k));printf("%lld\n",ans);}fclose(stdin);fclose(stdout);return 0; }
转载于:https://www.cnblogs.com/Dxy0310/p/9819018.html
LOJ #6303. 水题 (约数 质因数)相关推荐
- SDNU 1427.分解质因数(水题)
Description 问题描述 求出区间[a,b]中所有整数的质因数分解. 输入格式 输入两个整数a,b. 输出格式 每行输出一个数的分解,形如k=a1*a2*a3...(a1< =a2< ...
- 【2018.3.31】模拟赛之一-ssl2406 约数【水题】
前言 其实水题我是真的不想写的,但是没有办法 正题 大意 一个数,输出他的所有除数和 代码 #include<cstdio> #include<cmath> using nam ...
- 最详细最简单:最大公因数求法、辗转相除法、更相减损法,入门ACM,杭电水题,算法递归,初级算法题一看就懂
文章目录 前言 一.名称定义 1.最大公约数 2.辗转相除法 3.更相减损法 二.ACM杭电入门题 1.解题思路 三.解题参考代码(C语言,C++) 0.最优算法(C++) 1.辗转相除求解(C语言) ...
- [总结:]BZOJ水题70题留念
时间过得很快,转眼间BZOJ已经做了70道水题了.现在做一个整理 1001:狼抓兔子:平面图最小割转化为最短路,主要麻烦再建图 1002:轮状病毒:行列式+高精度 1008:越狱:快速幂+组合数学 1 ...
- 水题/poj 1852 Ants
1 /* 2 PROBLEM:poj1852 3 AUTHER:Nicole 4 MEMO:水题 5 */ 6 #include<cstdio> 7 using namespace std ...
- HDU2673-shǎ崽(水题)
如果不能够直接秒杀的题,就不算水题.又应证了那句话,有时候,如果在水题上卡住,那么此题对于你来说,也就不算是水题了额~~ 刚睡醒,迷迷糊糊. 题目的意思很简单,求一个最大的,再求一个最小的.几乎是什么 ...
- 图论刷水题记录(二)(最短路-----SPFA算法)
继第一篇的后续,又来刷水题了,写的是SPFA算法,这个算法的复杂度比较玄学,感觉能不用就不用了,但是他的好处就是可以判断负圈. 3月26日: 1.POJ 1847 Tram 题意:在一个交通网络上有N ...
- 图论刷水题记录(一)(最短路-----dijkstra算法)
最近实在不知道干些什么,感觉自己除了水题什么都不会做,算了去刷一刷图论的水题吧本来想合起来一起发,想了想太长的话以后看起来也不方便,题目所以今天晚上就先发了dij部分,由上到下由易变难. 1.POJ ...
- hdu 2041:超级楼梯(水题,递归)
超级楼梯Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submissio ...
最新文章
- html读取字典endfor,Flask和HTML,从python字典迭代到HTML表
- python不及格_10 个 Python 工程师,9 个不合格!!
- idea2021部署maven+javaweb项目到jboss(diy)
- java循环1000000000_求十亿内所有质数的和,怎么做最快?
- reactJS -- 13 JSX样式与CSS的互转
- ADT 压缩包 R23.0.0
- Android 即时通讯开发
- 2021-2025年中国氮化碳行业市场供需与战略研究报告
- 2017级C语言大作业 - 密室逃生
- jquery效果插件网址
- python水仙花数判断程序
- 把IE武装到牙齿,IE插件全攻略(转)
- 敏捷开发模式几个名词
- C++ uint8_t
- 数据结构实训-运动会分数统计
- 灰狼(GWO)算法(附完整Matlab代码,可直接复制)
- HTML DOM 导航
- python多级菜单_多级菜单.py
- 6个超实用的自媒体工具,百万博主都在用
- matlab求微分方程的初值问题,Matlab 解常微分方程的初值问题.doc
热门文章
- 教师继续教育 计算机知识,100道全国中小学教师继续教育网在线考试试题及答案...
- excel 内存或磁盘空间不足
- 一篇文章带你搞定 SpringBoot 上传文件(单文件/多文件/Ajax上传)
- AMD 锐龙3900x ROG X570E c9bjz内存超频作业
- ubuntu下连接远程打印机
- 服务器系统如何账务处理,云服务器费账务处理
- css3图片无缝滚动
- 矩阵消元-线性代数课时2(MIT Linear Algebra , Gilbert Strang)
- vins-mono保存、重载地图、evo工具测试
- HTML 基本开发方式,学会常用的 HTML 标签