• 蓝桥杯打卡Day7



    文章目录

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

    一、阶乘的末尾0IO链接

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

    1. #include
    2. int main()
    3. {
    4. std::ios::sync_with_stdio(false);
    5. std::cin.tie(nullptr);std::cout.tie(nullptr);
    6. int n;
    7. std::cin>>n;
    8. //这里我们可以知道2和5的乘积能得到0,那么我们可以知道某个数的阶乘中2这个质因子的次数肯定大于5这个质因子出现的次数
    9. int cnt=0;
    10. while(n){
    11. cnt+=n/5;
    12. n/=5;
    13. }
    14. std::cout<
    15. return 0;
    16. }

    二、整除问题IO链接

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

    1. #include
    2. int n,a;
    3. std::vectorint>> ans;
    4. void divide(int n)
    5. {
    6. for(int i=2;i<=n/i;i++){
    7. if(n%i==0){
    8. int s=0;
    9. while(n%i==0){
    10. s++;
    11. n/=i;
    12. }
    13. ans.push_back({i,s});
    14. }
    15. }
    16. if(n>1) ans.push_back({n,1});
    17. }
    18. int get_p(int n,int p)
    19. {
    20. int cnt=0;
    21. while(n){
    22. cnt+=n/p;
    23. n/=p;
    24. }
    25. return cnt;
    26. }
    27. int main()
    28. {
    29. std::ios::sync_with_stdio(false);
    30. std::cin.tie(nullptr);std::cout.tie(nullptr);
    31. std::cin>>n>>a;
    32. divide(a);
    33. int res=INT_MAX;
    34. for(int i=0;isize();i++)
    35. res=std::min(res,get_p(n,ans[i][0])/ans[i][1]);
    36. std::cout<
    37. return 0;
    38. }
  • 相关阅读:
    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