当前位置: 首页 > news >正文

[算法]求n!在m进制下末尾有多少个0

参考链接:求n!在m进制下末尾0的个数_.!零n,,m-CSDN博客

我们这里和参考链接不同

使用结构体去存储每个因数的信息

然后使用变量index作为索引,其最终值为因数的个数

具体原理:

例子1:求9!在10进制下的末尾的0的个数

思考1:在10进制下出现0,必须是质数2 与 5组合,所以统计2和5作为因数出现了多少次,取最小的数量就是答案

例子2:求10!在9进制下的末尾的0的个数

思考2:在9进制出现0,其必然是两个3组合起来才会在9进制出现0结尾,所以统计所有因子里面各自出现的次数(这里只有3)然后  整除以 对应因子在进制9里面出现的次数 取最小的那一个值 即是答案!

下面给出一个例题和题解

例题:Contest1035 - NewOJ 2022 Contest 7 - New Online Judge (ecustacm.cn)

题解:

#include<iostream>using namespace std;
#define debug(x) cout<<#x<<" : "<<x<<endl;
typedef long long int ll;const int maxLine=10010; 
struct primeInfo {int nums;int counts;
};
void getPrime(int m);
void printPrimeArray(struct primeInfo arr[maxLine],int len);
int countDivision(int n,int p);struct primeInfo  myPrime[maxLine];
// 记录数量和下标 
int index=0;
int res=0x3f3f3f3f;
int main(){int n,m;
//	cin>>n>>m;n=20;m=14; getPrime(m);
//	printPrimeArray(myPrime,index);for(int i=0;i<index;i++){res=min(res,countDivision(n,myPrime[i].nums)/myPrime[i].counts);}cout<<res;return  0;
} 
// 获取素数个数 
void getPrime(int m){for(int i=2;i*i<=m;i++){// 统计当前因数的个数和具体数值	while(m%i==0){myPrime[index].nums=i;myPrime[index].counts++;m/=i;}if(myPrime[index].counts!=0) index++; }	//如果是合数 那么会在之前统计完//如果是质数 那么本身这个质因数统计不到if (m>1) myPrime[index].nums=m,myPrime[index++].counts++; 
}
// 打印查看 
void printPrimeArray(struct primeInfo arr[maxLine],int len){for(int i=0;i<len;i++){cout<<i<<": "<<arr[i].nums<<" "<<arr[i].counts<<endl;}
}
int countDivision(int n,int p){// 只要不包含1这个参数就一定会结束循环 
//	cout<<"传入参数"<<n<<" "<<p<<endl;int counts=0;
//	debug(counts);while(n>0){counts+=n/p;n/=p;}
//	debug(counts);return counts;
}

中间用到了一点点判断因数范围的小技巧,你发现了吗?

http://www.lryc.cn/news/212851.html

相关文章:

  • mysql之用户管理、权限管理、密码管理
  • 图情档核心期刊 | 北大核心、CSSCI、CSCD
  • Mac上具好用的屏幕录像工具(Omi录屏专家)Screen Recorder By Omi Mac 下载安装详细教程
  • 牛客网刷题-(8)
  • oracle 重启步骤及踩坑经验
  • 处理mysql数据量大查询缓慢问题(最少百万才有差别)
  • element-plus走马灯不显示
  • 【精】UML及软件管理工具汇总
  • 【uniapp+vue3】scroll-view实现纵向自动滚动及swiper实现纵向自动滚动
  • this.refs[‘tagInput‘].refs.input.focus()和this.$refs[‘tagInput‘].focus()区别
  • 电脑硬件坏了,如何维修?
  • elementplus日期时间选择器组件显示很窄
  • 第三方软件测评选择远程测试好还是现场测试好?
  • HTTPS协议:保障网络安全的加密通信协议
  • C++设计模式_21_Iterator 迭代器(理解;面向对象的迭代器已过时;C++中使用泛型编程的方式实现)
  • 有一个 3*4 的矩阵,找出其中值最大的元素,及其行列号
  • 磁盘的命令
  • 一张图讲清楚业务稳定性要如何做:SRE体系化稳定性方案
  • 安卓端GB28181设备接入模块如何实现实时位置订阅(MobilePosition)
  • 11.与JavaScript深入交流-[js一篇通]
  • Ubuntu 搭建 DHCP ivp6 server 步骤
  • 分享大数据分析师前景怎么样? 从事行业有哪些?
  • 通过wordpress能搭建有影响力的帮助中心
  • word页脚设置,页脚显示第几页共有几页设置步骤
  • C语言实现斐波那契数列的多种方法
  • 一文解决:Swagger API 未授权访问漏洞问题
  • Elasticsearch下载安装,IK分词器、Kibana下载安装使用,elasticsearch使用演示
  • springboot自定义404页面
  • C/C++数据结构之时间复杂度和空间复杂度详细解析以及力扣刷题
  • 【需要理解】80 单词搜索