0
点赞
收藏
分享

微信扫一扫

【数论】21蓝桥:货物摆放


小蓝有一个超大的仓库,可以摆放很多货物。

现在,小蓝有 nn箱货物要摆放在仓库,每箱货物都是规则的正方体。小蓝规定了长、宽、高三个互相垂直的方向,每箱货物的边都必须严格平行于长、宽、高。

小蓝希望所有的货物最终摆成一个大的长方体。即在长、宽、高的方向上分别堆 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 × 11×1×4、1×2×2、1×4×1、2×1×2、2×2×1、4×1×1。

请问,当 n = 2021041820210418 (注意有 16 位数字)时,总共有多少种方案?

思路:

从n的所有约数中找3个数(可重复)乘积为n的个数

求所有约数:

vector<int>yue;
for(int i=1;i*i<=n;i++){
    if(n%i==0){
        yue.push_back(i);
        if(n/i!=i) yue.push_back(n/i);
    }
}

#include<iostream>
#include<vector>
using namespace std;
typedef long long LL;
int main(){
	LL n=2021041820210418;
	vector<LL>d;//储存n的所有约数
	for(LL i=1;i*i<=n;i++){
		if(n%i==0){
			d.push_back(i);
			if(n/i!=i)d.push_back(n/i);
		}
	} 
	int ans=0;
	vector<LL>::iterator a,b,c;
	for(a=d.begin();a!=d.end();a++){
		for(b=d.begin();b!=d.end();b++){
			for(c=d.begin();c!=d.end();c++){
				if((*a)*(*b)*(*c)==n){
					ans++;
				}
			}
		}
	}
	cout<<ans<<endl;
	return 0;
}

举报

相关推荐

0 条评论