分解质因数算法案例——仓库货物摆放(蓝桥杯)

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;
}

以上是关于分解质因数算法案例——仓库货物摆放(蓝桥杯)的主要内容,如果未能解决你的问题,请参考以下文章

蓝桥杯——算法训练 分解质因数

(蓝桥杯)试题 算法训练 分解质因数

蓝桥杯每日真题之货物摆放

蓝桥杯货物摆放思路分析

蓝桥杯货物摆放思路分析

蓝桥杯货物摆放思路分析