2014-12-04 42 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