2017-02-24 46 views
-1

我正在處理項目歐拉問題3,但我的代碼給出了一個奇怪的錯誤。錯誤是:項目歐拉#3 - 得到奇怪的致命錯誤

Fatal error: Can't use function return value in write context in D:\Google Drive\ITvitae\PHP5\ProjectEuler\PE3-PrimeFactor2.php on line 52

這是我運行代碼:

<html> 
<body> 

<?php 

ini_set('memory_limit', '1024M'); 
ini_set('set_time_limit', '120'); 

$max = 1000000; 
#$max = 600851475143; 
$primes = array(); 

// Define sqrt ceiling 
$maxSqrt = ceil(sqrt($max)); 


function isPrime($num) { 
    // 1 is not prime 
    if ($num == 1) 
     return false; 

    // 2 is prime 
    if ($num == 2) 
     return true; 

    // Removes all even numbers 
    if ($num % 2 == 0) { 
     return false; 
    } 

    // Check odd numbers, if factor return false 
    // The sqrt can be an aproximation, round it to the next highest integer value. 
    $ceil = ceil(sqrt($num)); 

    for ($i = 3; $i <= $ceil; $i = $i + 2) { 
     if($num % $i == 0) 
      return false; 
    } 

    return true; 
} 

//Push latest prime into array 
for ($i = 2; $i <= $maxSqrt; $i++) { 
    if (isPrime($i)) { 
     array_push($primes, $i); 
    } 
} 

// Check whether $max is divisible by $primes($j) 
for ($j = 0; $j <= count($primes); $j++) { 
    if ($max % $primes($j) = 0) { 
     $max = $max/$primes($j); 
    } 
} 

//echo "<pre>"; 
//var_dump($primes); 
//echo "</pre>"; 

echo array_pop($primes); 

?> 

</body> 
</html> 

52線是

if ($max % $primes($j) = 0) { 

下//檢查$最大是整除$素數( $ j)

我從來沒有見過這個錯誤,我不明白它爲什麼給它。在我的腦海裏,邏輯完美無瑕(不可避免,因此不是)。這裏出了什麼問題?

編輯:把它改成

if ($max % $primes($j) == 0) { 

但它告訴我函數名稱必須是一個字符串。我不明白。

+0

的[3不同等於](http://stackoverflow.com/questions/2063480/the-3-different-equals) –

+2

'='是分配可能的複製; ==是比較;你不能分配給一個表達式,只能分配給一個變量......這就是錯誤意味着在這種情況下 –

+0

我試過了,但那也沒有效果。它告訴我「函數名稱必須是字符串」。我更少理解這一點。 – Sander

回答

0

第一個問題是,您使用=進行比較。 =是一個賦值,你不能賦值給一個表達式(即不會有一個有用的含義。)

其次,你必須使用[]對於數組訪問,而不是()。在標識符或變量總是嘗試調用函數後使用()。在你的情況下,$primes是一個數組,它不是一個函數。

第三,你應該修復for循環中的一個數組訪問錯誤。

for ($j = 0; $j < count($primes); $j++) { // < instead of <= 
    if ($max % $primes[$j] == 0) { // == instead of = and [] instead of() 
     $max = $max/$primes[$j]; // again [] instead of() 
    } 
} 
+0

謝謝!我忽略了<=並因此而出現了多個問題。試圖以奇怪的方式解決它,但這更有意義。 – Sander