网站建设营销开场白,网站图片在手机上做多大最清晰,wordpress paginate_comments_links,培训机构活动策划网站题目描述
小蓝有一个超大的仓库#xff0c;可以摆放很多货物。
现在#xff0c;小蓝有 nn 箱货物要摆放在仓库#xff0c;每箱货物都是规则的正方体。小蓝规定了长、宽、高三个互相垂直的方向#xff0c;每箱货物的边都必须严格平行于长、宽、高。
小蓝希望所有的货物最…题目描述
小蓝有一个超大的仓库可以摆放很多货物。
现在小蓝有 nn 箱货物要摆放在仓库每箱货物都是规则的正方体。小蓝规定了长、宽、高三个互相垂直的方向每箱货物的边都必须严格平行于长、宽、高。
小蓝希望所有的货物最终摆成一个大的长方体。即在长、宽、高的方向上分别堆 LL、WW、HH 的货物,满足 n L \times W \times HnL×W×H。
给定 nn请问有多少种堆放货物的方案满足要求。
例如当 n 4n4 时有以下 66 种方案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 2021041820210418n2021041820210418 注意有 1616 位数字时总共有多少种方案
提示建议使用计算机编程解决问题。
答案提交
这是一道结果填空的题你只需要算出结果后提交即可。本题的结果为一个整数在提交答案时只填写这个整数填写多余的内容将无法得分。
运行限制
最大运行时间1s最大运行内存: 256M
三重暴力确实是个办法但是时间复杂度太高肯定不行
那么只循环前两个变量第三个变量用maxn/a/b计算需要同时判断是否能除尽
这种方法同样跑不起来也不推荐
所以我们要进行合理的剪枝
我们不妨用组合的办法做
剪枝条件如下
#include bits/stdc.h
using namespace std;
typedef long long ll;
const ll maxn2021041820210418;
ll a,b,c,ans;
bool check(int x)
{if(maxn%x0) return true;else return false;
}
bool check2()
{if(maxn%(a*b)0) return true;else return false;
}
int main()
{for(a1;a*a*amaxn;a){if(check(a)){for(ba;a*b*bmaxn;b){if(check2()){cmaxn/(a*b);printf(%lld %lld %lld\n,a,b,c);if(abac) ans1;else if(ab||ac||bc) ans3;else ans6;}}}}coutans;return 0;
}
三个数相同排列有1种
两个数相同排列有3种
都不相同排列有6种