2014-12-04 62 views
0

我需要生成所有可能的(a, b, c),如a * b * c = V,其中V是function parameter生成给定体积的所有立方体

是否有一些正确的方法来完成我的任务?我尝试使用a, b, c的完全蛮力,但它非常缓慢。这是由于事实,即V可能超过10^4

P.S. a, b, c是整数。

+0

假设“立方体”的意思是“矩形棱镜”:不可能的,有无数的解决方案。防爆。对于V = 1,有(1,1,1),(1,2,1/2),(1,3,1/3),(1,4,1/4),(1,5,1/5)...永远持续。 – Kevin 2014-12-04 19:52:28

+5

假设你想要整数解,然后把V分解成素数积,并考虑如何在a,b,c之间分配素数。 – 2014-12-04 19:54:43

+0

@凯文,是的,我的意思是直角棱镜。我很抱歉,但我只需要整数'a,b,c'。 – Max 2014-12-04 19:55:00

回答

1

我猜你正在做这样的事情:

def prisms(V): 
    for a in range(1, V+1): 
     for b in range(1, V+1): 
      for c in range(1, V+1): 
       if a*b*c = V: 
        print a,b,c 

您可以从O(N^3)从派生C的值降低了复杂性,O(N^2)已经知道和A的值B.

def prisms(V): 
    for a in range(1, V+1): 
     for b in range(1, V+1): 
      if V % (a*b) == 0: 
       c = V/(a*b) 
       print a,b,c 

这不是做最有效的方式,但其实很简单,可以是大约10 ** 4 V的值足够好。

+0

我会试试看,谢谢。 – Max 2014-12-04 20:02:36

+0

你也可以将b的范围缩小到'range(a,int((V/a)** .5)+ 1)'。 – recursive 2014-12-04 20:03:51

+0

@递归,你的减少可以帮助我。谢谢! – Max 2014-12-04 20:41:17