【问题描述】
小蓝有一个超大的仓库,可以摆放很多货物。
现在,小蓝有n箱货物要摆放在仓库,每箱货物都是规则的正方体。小蓝规定了长、宽、高三个互相垂直的方向,每箱货物的边都必须严格平行于长、宽、高。
小蓝希望所有的货物最终摆成一个大的立方体。即在长、宽、高的方向上分别堆L、W、H的货物,满足n=L×Wx H。
给定n,请问有多少种堆放货物的方案满足要求。
例如,当n =4时,有以下6种方案:1×1×4、1×2×2、1×4×1、2x1×2、2 ×2×1、4x1×1。
请问,当n = 2021041820210418(注意有16 位数字)时,总共有多少种方案?
我用的三层for循环做不出来......
求大神 指教......
您好,我是有问必答小助手,你的问题已经有小伙伴为您解答了问题,您看下是否解决了您的问题,可以追评进行沟通哦~
如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~
ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632
#include <stdio.h>
#pragma warning( disable : 4996)
int main() {
long long L, W, H;
for (L = 1; L < 2021041820210418; L++){
for (W = 1; W < 2021041820210418; W++){
for (H = 1; H < 2021041820210418; H++){
if (L*W*H == 2021041820210418){
printf("%d*%d*%d\n", L, W, H);
}
}
}
}
return 0;
}
这是不是很容易想到,但是为什么执行不出来?这算法的复杂度高的吓死人
求质因数
#include <stdio.h>
#pragma warning( disable : 4996)
int main() {
long long item = 2021041820210418;
int div = 2;
while (item != 1){
if (item%div == 0){
item /= div;
printf("%d*", div);
}
else{
div++;
}
}
return 0;
}
好了,8个质因数.
由于是三个位置随便放数字。
理论上是 3^8 但是有3个3.
分类讨论
第一个位置 0个3 0 3,1 2和2 1,3 0 4种
1个3 0 2, 1 1,2 0 3种
2个3 0 1, 1 0 2种
3个3 1 种
最后结果是 3^5 * 10 =2430
非常感谢您使用有问必答服务,为了后续更快速的帮您解决问题,现诚邀您参与有问必答体验反馈。您的建议将会运用到我们的产品优化中,希望能得到您的支持与协助!
速戳参与调研>>>https://t.csdnimg.cn/Kf0y
C和C++完整教程:https://blog.csdn.net/it_xiangqiang/category_10581430.html
C和C++算法完整教程:https://blog.csdn.net/it_xiangqiang/category_10768339.html