我正在处理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) {
但它告诉我函数名必须是一个字符串。我不明白。
答案 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 ()
}
}