蓝桥杯-阶乘约数-java

Posted ME_._ME

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了蓝桥杯-阶乘约数-java相关的知识,希望对你有一定的参考价值。

题目描述

定义阶乘 n! = 1 × 2 × 3 × · · · × n。
请问 100! (100 的阶乘)有多少个约数。

  • 数论的一个知识点:

思路:
举个例子
180=2 * 2 * 3 * 3 * 5=22*32 * 5
那么 2 的2 次方对应的约数有 1 2 4 (3个)
3的二次方约数有 1,3, 9 (3个)
5的约数有 1,5 (2个)
则180的约数个数有(1+2) * (1+2) * (1+1)=18个。直接模拟判断约数的个数即可
利用唯一分解定理,分解出质因数对应的的幂数
其中arr数组对应的是质因数的幂数,也就是 a1,a2,a3…


public class Main 
    public static void main(String[] args) 
        // 100 的阶乘有多少约数
        int[] arr=new int[102];
        //利用唯一分解定理分解100的阶乘
        // 必须要从2开始
        for (int i=2;i<=100;i++)
            int n=i;
            for (int j=2;j*j<=n;j++ )
                while (n%j==0)// 当能够整除 的时候,对应余数的幂次加一
                    arr[j]++;
                    n/=j;
                
            
            //整除完了后如果剩下的n不为1,则当前的n为因子
            if (n>1)
                arr[n]++;
            
        
        long ans=1;
        for (int i=2;i<=100;i++)
            if (arr[i]>0)
                ans*=(arr[i]+1);
            
        
        System.out.println(ans);

    



其中我们判断在一定范围也可以通过下面 的isprime方法构造素数数组也可

 public  static  boolean isprime(int x)
        if (x==1) return false;
        for (int i=2;i<x;i++)
            if (x%i==0)
                return  false;
            
        
        return  true;
    

以上是关于蓝桥杯-阶乘约数-java的主要内容,如果未能解决你的问题,请参考以下文章

第十一届蓝桥杯(国赛)——阶乘约数

第十一届蓝桥杯(国赛)——阶乘约数

第十一届蓝桥杯(国赛)——阶乘约数

阶乘约数——蓝桥杯python组国赛题(C++唯一分解定理)

java 蓝桥杯 递归 阶乘

第十一届蓝桥杯——JAVA组真题