小蓝有一个超大的仓库,可以摆放很多货物。
现在,小蓝有 n 箱货物要摆放在仓库,每箱货物都是规则的正方体。小蓝规定了长、宽、高三个互相垂直的方向,每箱货物的边都必须严格平行于长、宽、高。
小蓝希望所有的货物最终摆成一个大的长方体。即在长、宽、高的方向上分别堆工、w、 的货物,满足n=L*W*H.
给定n,请问有多少种堆放货物的方案满足要求
例如,当n=4时,有以下6种方案: 1x1x4、1x2x2、1x4x1、2x1x 2、2x2X1、4x1x 1.
请问,当n=2021041820210418 (注意有16位数字)时,总共有多少种方案?
#include <stdio.h>
#include <math.h>
//16->1 2 4 8 16 (n-1)*2+1
//1, 1 2, 1 2 4, 1 2 4 8, 1 2 4 8 16
int main () {
long long n = 2021041820210418, n1, i, j, count = 0, cnt = 0;
long long num[1000],num1[1000];
n1 = pow(n,0.5);
for (i = 1; i <= n1; i++) {
if (n%i==0) {
num[count++]=i;
if (i*i!=n)
num[count++]=n/i;
}
}
// printf("因数=%lld\n",count);
for (i = 0; i < count; i++) {
// printf("因数为%lld\n",num[i]);
for (j = 0; j < count; j++) {
if (num[i]%num[j]==0) {
// printf("%d因数的因数为%d\n",num[i],num[j]);
cnt++;
}
}
}
printf("%lld",cnt);
}