蓝桥杯打卡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;
}
相关推荐
zore_c2 分钟前
【数据结构】队列——超详解!!!(包含队列的实现)
c语言·网络·数据结构·c++·笔记·算法·链表
小杰帅气4 分钟前
智能指针喵喵喵
开发语言·c++·算法
智驱力人工智能13 分钟前
守护生命的水上之眼 无人机人员落水检测系统的技术攻坚与应用实践 无人机溺水识别 山区水库无人机落水检测系统 水域安全无人机部署指南
大数据·人工智能·算法·安全·无人机·边缘计算
hweiyu0015 分钟前
排序算法选型决策树
算法·排序算法
蓝色汪洋2 小时前
xtu oj矩阵
算法
hh随便起个名8 小时前
力扣二叉树的三种遍历
javascript·数据结构·算法·leetcode
Dingdangcat8610 小时前
城市交通多目标检测系统:YOLO11-MAN-FasterCGLU算法优化与实战应用_3
算法·目标检测·目标跟踪
xie_pin_an10 小时前
深入浅出 C 语言数据结构:从线性表到二叉树的实战指南
c语言·数据结构·图论
tang&10 小时前
滑动窗口:双指针的优雅舞步,征服连续区间问题的利器
数据结构·算法·哈希算法·滑动窗口
拼命鼠鼠10 小时前
【算法】矩阵链乘法的动态规划算法
算法·矩阵·动态规划