分解质因数算法案例——仓库货物摆放(蓝桥杯)
Posted 超浪*牛
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了分解质因数算法案例——仓库货物摆放(蓝桥杯)相关的知识,希望对你有一定的参考价值。
- 问题描述
小蓝有一个超大的仓库,可以摆放很多货物。
现在,小蓝有 n 箱货物要摆放在仓库,每箱货物都是规则的正方体。小蓝规定了长、宽、高三个互相垂直的方向,每箱货物的边都必须严格平行于长、宽、高。
小蓝希望所有的货物最终摆成一个大的立方体。即在长、宽、高的方向上分别堆 L 、 W 、 H 的货物,满足 n = L × W × H
给定 n ,请问有多少种堆放货物的方案满足要求。
例如,当 n = 4 时,有以下 6 种方案: 1 × 1 × 4 、 1 × 2 × 2 、 1 × 4 × 1 、 2 × 1 × 2 、 2 × 2 × 1 、 4 × 1 × 1
请问,当 n = 2021041820210418 n = 2021041820210418 n=2021041820210418 (注意有 16位数字)时,总共有多少种方案?
提示:建议使用计算机编程解决问题。
思路:循环暴力枚举解决法,理论上可以,可行性不行,转换思路分解出整个数字的所有因(约)数,然后对所有的因数暴力枚举两重循环,计算出结果
#include <stdio.h>
#include <stdlib.h>
long long n = 2021041820210418;
long long num[10000] = {0};
int a=0;
int fun(long long n,long long num[]){
long long i;
for(i=1;i<=n/i;i++){
if(n%i == 0){
num[a++] = i;
printf("%lld ",i);
if(i*i != n){
num[a++] = n/i;
printf("%lld\\n",n/i);
}
}
}
return a;
}
int main() {
int i,j,b = fun(n,num);
int count=0;
printf("分解为%ld个约数",b);
printf("下标为%d的数字是%d",a,num[a]);
for(i=0;i<=b;i++){
for(j=0;j<=b;j++){
if(n%(num[i]*num[j]) == 0){
count++;
}
}
}
printf("有%d种方案!",count);
return 0;
}
以上是关于分解质因数算法案例——仓库货物摆放(蓝桥杯)的主要内容,如果未能解决你的问题,请参考以下文章