2013-09-27 91 views
-3

我爲Java Project for Euler編寫代碼(http://projecteuler.net/)。我對Java編程相當陌生,所以我只針對問題#12,它要求您找到超過500個因子的最小三角形數(例如1 + 2 + 3 + 4 + 5)。我寫的代碼,但由於某種原因,我的代碼不斷得到鴻:我的java代碼有什麼問題?歐拉項目12

 int factors = 0; 
    long triangle = 0L; 
    for(int x = 1; factors <= 500; x++){ 
     triangle += x; 
     for(int y = 1; y<=triangle; y++){ 
      if(triangle%y==0){ 
       factors = factors + 1; 
      } 
     } 
     if(factors > 500){ 
      System.out.println(triangle); 
     } 
     else{ 
      factors = 0; 
     } 
    } 

對於空間的便利性,我不包括的類或主。該程序沒有編譯時錯誤,但我無法弄清楚它爲什麼沒有產生答案。

感謝您的幫助

+0

因爲我認爲這將是一個非常大的數字。另外,要在'triangle + = x'中加入自身,它首先必須等於什麼。 – Moose

+1

您是否嘗試過使用調試器來查看三角形因子的值是如何隨x的每次迭代而改變的? – Marcelo

+2

它沒有被掛起;這只是非常低效。要解決這個問題,你將不得不嘗試一種不同的方法。 –

回答

3

您的程序實際上並不會掛起;這只是非常低效。

由於這是一個歐拉項目問題,我不會直接給你一個更優化的解決方案。我會告訴你的是,

for(int y = 1; y<=triangle; y++){ 
    if(triangle%y==0){ 
     factors = factors + 1; 
    } 
} 

是需要更快的部分。您不需要實際循環遍歷每個小於triangle的數字。如果triangle以百萬爲單位(作爲示例),則這增加了比必要的計算更多的計算。你怎麼能更快得到更多的因素?