栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

蓝桥杯-阶乘约数-java

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

蓝桥杯-阶乘约数-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
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/691222.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号