
本题思路:由于本题需要求阶乘的末尾0,由于我们知道2*5=10可以得到一个0,那么我们就可以找出2的数和5的数,但是由于是阶乘,所以5的数量肯定是小于2的数量,因此我们只需要知道5的数量即可,这里只需要算含有5的次幂的数目即可。
- #include
-
- int main()
- {
- std::ios::sync_with_stdio(false);
- std::cin.tie(nullptr);std::cout.tie(nullptr);
-
- int n;
- std::cin>>n;
-
- //这里我们可以知道2和5的乘积能得到0,那么我们可以知道某个数的阶乘中2这个质因子的次数肯定大于5这个质因子出现的次数
- int cnt=0;
- while(n){
- cnt+=n/5;
- n/=5;
- }
-
- std::cout<
- return 0;
- }
二、整除问题IO链接
本题思路:我们可以把 a 给拆分成若干个质因子之积,然后看下 2 ~ n 中包含多少个对应的质因子,就能得出来最多可以整除 a 的多少次方。比如 a 中有质因子p1、p2、p3,2 ~ n 中有对应的质因子、num1、num2 … 个,那 k 的最大值也就是若干个 num 的最小值。
- #include
-
- int n,a;
- std::vector
int>> ans; -
- void divide(int n)
- {
- for(int i=2;i<=n/i;i++){
- if(n%i==0){
- int s=0;
- while(n%i==0){
- s++;
- n/=i;
- }
- ans.push_back({i,s});
- }
-
- }
-
- if(n>1) ans.push_back({n,1});
-
- }
-
- int get_p(int n,int p)
- {
- int cnt=0;
- while(n){
- cnt+=n/p;
- n/=p;
- }
- return cnt;
- }
-
- int main()
- {
- std::ios::sync_with_stdio(false);
- std::cin.tie(nullptr);std::cout.tie(nullptr);
-
- std::cin>>n>>a;
-
- divide(a);
- int res=INT_MAX;
- for(int i=0;i
size();i++) - res=std::min(res,get_p(n,ans[i][0])/ans[i][1]);
- std::cout<
- return 0;
- }
-
相关阅读:
Go编程源码分析channel
Python 绘制玫瑰花
Vue----属性侦听器
XML Encoding = ‘GBK‘ after STRANS,中文乱码
[附源码]计算机毕业设计JAVAjsp小微企业库存管理系统
Docker-----emqx部署
利用优化算法提高爬虫任务调度效率
PHP 将json格式数据转换成数组的方法
第一届“龙信杯”电子数据取证竞赛Writeup
HTML5 新元素
-
原文地址:https://blog.csdn.net/qq_67458830/article/details/132829580