蓝桥杯 2020 国赛 阶乘约数
public static void main(String[] args) {
int[] st = new int[101]; // 从1到100
for (int i = 1; i <= 100; i++) {
int k = i; // 不能让分解结果影响循环
for (int j = 2; j*j <= k; j++) { // i 为被分解数
// 以sqrt(n)为界 如果一个数在左边,必然有一个数在右边,不用求完 只需要求一半(i*i)就行 就可以判断是不是质数
if (k%j==0) {
// 不是质数 开始分解
while (k%j==0) {
k/=j;
// 对应位置次数+1
st[j]++;
}
}
}
if (k>1) {
st[k]++;
}
}
long res = 1;
for (int i = 0; i < 101; i++) {
if (st[i] != 0) {
res = res* (st[i]+1);
}
}
System.out.println(res);
}
这个代码有点类似于求n以内的质因数(可以看我之前的文章),
之前求质因数代码是这样的:
这里的res++不在while循环里面,因为求的是质因数,而本题求的是因数,所以res必然在while里面(str[j]++),然后公式就是所有数(1-100)的因数和的乘机(要加1是因为还包括本身)