为了在基于 php 的 bash 中创建一个可以恢复的素数列表,我使用了 fmod() 和这里在 php 评论中提供的另外两个用户的代码片段。
这将输出
"素数;最后一个素数和当前素数之间的差"
因此功劳归于他们。我只做了日志文件输出。
这将一直运行到 fmod 支持的最高值。只需输入 $end 值。并对日志文件执行 touch 命令,然后执行 chmod 666,这样 php 就可以访问它。
<?php
function tailCustom($filepath, $lines = 1, $adaptive = true) {
$f = @fopen($filepath, "rb");
if ($f === false) return false;
if (!$adaptive) $buffer = 4096;
else $buffer = ($lines < 2 ? 64 : ($lines < 10 ? 512 : 4096));
fseek($f, -1, SEEK_END);
if (fread($f, 1) != "\n") $lines -= 1;
$output = '';
$chunk = '';
while (ftell($f) > 0 && $lines >= 0) {
$seek = min(ftell($f), $buffer);
fseek($f, -$seek, SEEK_CUR);
$output = ($chunk = fread($f, $seek)) . $output;
fseek($f, -mb_strlen($chunk, '8bit'), SEEK_CUR);
$lines -= substr_count($chunk, "\n");
}
while ($lines++ < 0) {
$output = substr($output, strpos($output, "\n") + 1);
}
fclose($f);
return trim($output);
}
function isPrime( $num )
{
for( $i = 2; $i*$i <= $num; $i++ )
if( !fmod($num,$i) )
return FALSE;
return TRUE;
}
$logfile = 'prim_save.log';
$lastline = explode(";", tailCustom($logfile));
$begin = ($lastline[0] +1);
$lastprime = $lastline[0];
$end = 999999999999999999999999999999999999;
$fp = fopen($logfile, 'a');
for($i = $begin; $i<$end; $i++)
{
if(isPrime($i) == TRUE)
{
$difference = $i - $lastprime;
fputs($fp,$i.';'.$difference.';'."\n");
$lastprime = $i;
}
}
fclose($fp);
?>