蓝桥--货物摆放(求约数问题)

题目描述

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

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

小蓝希望所有的货物最终摆成一个大的长方体。即在长、宽、高的方向上分别堆 L、W、H 的货物,满足 n=L×W×H。

给定 nn,请问有多少种堆放货物的方案满足要求。

例如,当 n = 4时,有以下 6种方案:1×1×4、1×2×2、1×4×1、2×1×2、2×2×1、4×1×1。

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

提示:建议使用计算机编程解决问题。

答案提交

这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。

运行限制

  • 最大运行时间:1s
  • 最大运行内存: 256M

 

解题思路

1.根据n=L*H*W可以知道,L,H,W都是n的约数,所以这道题的本质是求n的所有约数,最后用三层循环直接求解就行了。因为本题是道填空题,所以超时什么的就无所谓了。

2.什么是约数?

约数又称因数。比如说a/b的余数为0,那么b就是a的约数(因数)。

3.局部优化

虽然最后依旧会超时,但我们可以在求约数的地方优化一下,减少一下代码的运行时间。

 

比如:求25的所有约数,基础的方法就是从1遍历到25,如果余数为0那么这个数就是约数,但如果像题目的数那么大的话,求个约数都要运行半天。

 

所以可以把遍历的范围限制到数据的算数平方根,这样的话求约数的时间就大大减少了。在这里要注意的是,除数是约数,商也是约数,有些情况是除数会等于商的(比如25/5除数为5,商也为5),所以用集合来存储约数。

Code:

'''
n=2021041820210418
a=set() #用集合来储存约数,因为集合会自动去重
for i in range(1,int(pow(n,0.5))+1): #这里从1遍历到数据的算数平方根,节省点时间
  if n%i==0:
    a.add(i) #除数是约数
    a.add(n//i)  #商也是约数
num=0
for i in a:
  for j in a:
    for k in a:
      if i*j*k==n:
        num+=1
print(num)
'''
print(2430)

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值