本题思路:由于本题需要求阶乘的末尾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;
- }
-
相关阅读:
华纳云:openstack vm ip无故丢失的原因是什么
Spring源码分析(四) Aop全流程
何为消息队列?它的特点是什么?
44、DeVRF
全球C++软件开发顾问约翰·拉科斯(John Lakos)新书即将上架
Windows安装Linux子系统
汽车标定技术(三)--XCP协议如何支持测量功能
Springboot辅助功能(内嵌tomcat服务器)
org.springframework.boot.context.properties.ConfigurationBeanFactoryMetadata
揭秘小程序上线不到一周,每天2万销售额,究竟怎么做到的?
-
原文地址:https://blog.csdn.net/qq_67458830/article/details/132829580