蓝桥杯打卡Day7


文章目录

  • 阶乘的末尾0
  • 整除问题

一、阶乘的末尾0IO链接

**本题思路:**由于本题需要求阶乘的末尾0,由于我们知道2*5=10可以得到一个0,那么我们就可以找出2的数和5的数,但是由于是阶乘,所以5的数量肯定是小于2的数量,因此我们只需要知道5的数量即可,这里只需要算含有5的次幂的数目即可。

cpp 复制代码
#include <bits/stdc++.h>

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<<cnt<<std::endl;
  return 0;
}

二、整除问题IO链接

**本题思路:**我们可以把 a 给拆分成若干个质因子之积,然后看下 2 ~ n 中包含多少个对应的质因子,就能得出来最多可以整除 a 的多少次方。比如 a 中有质因子p1、p2、p3,2 ~ n 中有对应的质因子、num1、num2 ... 个,那 k 的最大值也就是若干个 num 的最小值。

cpp 复制代码
#include <bits/stdc++.h>

int n,a;
std::vector<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<ans.size();i++)
        res=std::min(res,get_p(n,ans[i][0])/ans[i][1]);
    std::cout<<res<<std::endl;
    return 0;
}
相关推荐
好好学习啊天天向上26 分钟前
多维c++ vector, vector<pair<int,int>>, vector<vector<pair<int,int>>>示例
开发语言·c++·算法
MicroTech202533 分钟前
MLGO微算法科技 LOP算法:实现多用户无线传感系统中边缘协同AI推理的智能优化路径
人工智能·科技·算法
Greedy Alg1 小时前
Leetcode 279. 完全平方数
算法
剪一朵云爱着1 小时前
力扣410. 分割数组的最大值
算法·leetcode
Swift社区1 小时前
LeetCode 410 - 分割数组的最大值
算法·leetcode·职场和发展
ゞ 正在缓冲99%…1 小时前
leetcode375.猜数字大小II
数据结构·算法·leetcode·动态规划
Greedy Alg1 小时前
LeetCode 79. 单词搜索
算法
碧海银沙音频科技研究院1 小时前
i2s的LRCK时钟有毛刺以及BCLK数据在高采样率有变形数据解析错误问题原因以及解决方法
人工智能·深度学习·算法·分类·音视频
kida_yuan2 小时前
【从零开始】17. 中文摘要提取工具
python·算法·数据分析
水蓝烟雨2 小时前
0430. 扁平化多级双向链表
数据结构·链表