2015-08-24 54 views
0

我不知道PHP是否適合這種類型的編碼,但它比其他語言更容易。我發現了一些可以在php中找到除數的代碼,但它有時會給出錯誤的答案。PHP計算43000以下有多少個數有5個因子

<?php 
$input = 8; 
$total_divisors = 0; 
for($i=1; $i < $input; $i++) { 
    if ($input % $i == 0) $total_divisors++; 
} 
print $total_divisors; 
?> 

由於輸出給出了答案3而不是4.我相信這個腳本不會將數字1作爲除數。我只知道一點點的php,所有的$都對我來說有點複雜。如果有人能幫助我一個給我正確的除數值的代碼(因爲我找不到任何工作的代碼除外),所以我可以自己做。

+0

https://3v4l.org/1HWno只有3以下的值divisiors '$ input'。 –

回答

0

您的代碼不包含輸入數字本身,因此只需將for循環中的條件從<更改爲<=(例如,

$input = 8; 
$total_divisors = 0; 

for($i = 1; $i <= $input; $i++) { 
      //^^ See here 
    if ($input % $i == 0) $total_divisors++; 
} 

print $total_divisors; 

你的代碼之前所做的是:

    | $input | $total_divisors | $i || for condition | if condition 
                 ($i <= $input) ($input % $i == 0) 
------------------------------------------------------------------------------------------ 
0. iteration |  8 |  0   | 1 ||  -  |   - 
1. iteration |  8 |  1   | 1 || 1 < 8 -> TRUE | 8 % 1 == 0 -> TRUE 
2. iteration |  8 |  2   | 2 || 2 < 8 -> TRUE | 8 % 2 == 0 -> TRUE 
3. iteration |  8 |  0   | 3 || 3 < 8 -> TRUE | 8 % 3 == 0 -> FALSE 
4. iteration |  8 |  3   | 4 || 4 < 8 -> TRUE | 8 % 4 == 0 -> TRUE 
5. iteration |  8 |  0   | 5 || 5 < 8 -> TRUE | 8 % 5 == 0 -> FALSE 
6. iteration |  8 |  0   | 6 || 6 < 8 -> TRUE | 8 % 6 == 0 -> FALSE 
7. iteration |  8 |  0   | 7 || 7 < 8 -> TRUE | 8 % 7 == 0 -> FALSE 

            
 
  
             8. iteration |  8 |  4   | 8 || 
             
  8 < 8 -> FALSE | 8 % 8 == 0 -> TRUE
            
 

所以你可以在上面的例子中看到你從來沒有經歷過在你前面的代碼的8迭代去了。

0

它不考慮8,你已經檢查的所有數量小於$input 正確的代碼將是:

<?php 
$input = 8; 
$total_divisors = 0; 
for($i=1; $i <= $input; $i++) { 
    if ($input % $i == 0) 
    $total_divisors++; 
} 
print $total_divisors; 
?> 
相關問題