项目欧拉#3 - 获得奇怪的致命错误

时间:2017-02-24 14:37:54

标签: php

我正在处理Project Euler问题3,但我的代码给出了一个奇怪的错误。错误是:

  

致命错误:无法在写入上下文中使用函数返回值   D:\ Google Drive \ ITvitae \ PHP5 \ ProjectEuler \ PE3-PrimeFactor2.php上线   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) {

在//检查$ max是否可被$ primes($ j)整除

我之前从未见过这个错误,我也不明白它为什么会这样做。在我的脑海中,逻辑是完美的(这不可避免,因此它不是)。这里出了什么问题?

编辑:将其更改为

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

但它告诉我函数名必须是一个字符串。我不明白。

1 个答案:

答案 0 :(得分:0)

第一个问题是,您使用=进行比较。 =是一个赋值,你不能为表达式赋值(这个值没有用的含义......)

其次,您必须使用[]进行数组访问,而不是()。在标识符或var之后使用()总是尝试调用函数。在你的情况下,$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 ()
    }
}