阶乘约数-蓝桥杯国赛java

阶乘约数
题目:100!(100)的阶乘中有多少个正约数。
分析:
这算是一道数学题吧,不做推导。
100!数目相对来说比较大,我使用180这个数来分析。
第一步:找出180以内的所有质数,(1不是质数)
180的约数【2,3,5,7,11,13,17…】
第二步:
如180=22335
180的约数个数为(1+2)(1+2)(1+1)=18个。
也就是说找出每一个180除以每一个质数所得的幂在加一相乘。
下面贴出求180约数个数的代码(100!的话需要使用到BigInteger);

package 第十一届;

import java.util.ArrayList;

public class 阶乘约数 {
	
	public static void main(String[] args) {
		int a = 180;
		ArrayList<Integer> list = new ArrayList<>();
		for (int i = 2; i <= 180; i++) {
			ArrayList<Integer> copylist2 = new ArrayList<>();
			for (int j = 2; j <= i; j++) {
				if (i % j == 0) {
					copylist2.add(j);
					copylist2.add(i/j);
				}
			}
			if (copylist2.size() <= 2) {
				list.add(i);
			}
			copylist2.clear();
		}
		int count = 1;
		for (int i = 0; i <list.size(); i++) {
			int t = list.get(i);
			int pq = 0;
			int fp = 180;
			while(fp % t == 0) {
				fp = fp / t;
				pq++;
			}
			count = count *(pq+1);
		}
		System.out.println(count);
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

WeChat098

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值