#!/usr/bin/php = 1); $res = $bioct; for ($p=2; $p<=$n; $p++) $res = bioct_mul($res, $bioct); return $res; } function bioct_is_immortal($bioct, $power) { $bioctpow = bioct_int_power($bioct, $power); for ($i=0; $i<8; $i++) { for ($j=0; $j<2; $j++) { $x1 = bcabs($bioct[$j][$i]); $x2 = bcabs($bioctpow[$j][$i]); if (substr($x2, -strlen($x1)) != $x1) return false; } } return $bioctpow; } function _go($a, $b, $c, $d, $e, $f, $g, $h, $i, $j, $k, $l, $m, $n, $o, $p, $power, $distance, &$progr, &$found) { $bioct = [ [$a, $b, $c, $d, $e, $f, $g, $h], [$i, $j, $k, $l, $m, $n, $o, $p] ]; $bioctpower = bioct_is_immortal($bioct, $power); if ($bioctpower !== false) { $a_ = $bioctpower[0][0]; $b_ = $bioctpower[0][1]; $c_ = $bioctpower[0][2]; $d_ = $bioctpower[0][3]; $e_ = $bioctpower[0][4]; $f_ = $bioctpower[0][5]; $g_ = $bioctpower[0][6]; $h_ = $bioctpower[0][7]; $i_ = $bioctpower[1][0]; $j_ = $bioctpower[1][1]; $k_ = $bioctpower[1][2]; $l_ = $bioctpower[1][3]; $m_ = $bioctpower[1][4]; $n_ = $bioctpower[1][5]; $o_ = $bioctpower[1][6]; $p_ = $bioctpower[1][7]; if (($i!=0) || ($j!=0) || ($k!=0) || ($l!=0) || ($m!=0) || ($n!=0) || ($o!=0) || ($p!=0)) { $str = "BIOC "; // Since BiQuad is (1, 1h, i, ih, j, jh, k, kh): // A true quaternion would be a, 0, c, 0, e, 0, g, 0 // A true complex would be a, 0, c, 0, 0, 0, 0, 0 } else if (($b!=0) || ($d!=0) || ($f!=0) || ($h!=0)) { $str = "BIQU "; } else if (($e!=0) || ($g!=0)) { $str = "QUAD "; } else if ($c!=0) { $str = "CPLX "; } else { $str = "REAL "; } $str .= "| Distance=$distance | "; $str .= "[($a, $b, $c, $d, $e, $f, $g, $h), ($i, $j, $k, $l, $m, $n, $o, $p)] ^ $power = [($a_, $b_, $c_, $d_, $e_, $f_, $g_, $h_), ($i_, $j_, $k_, $l_, $m_, $n_, $o_, $p_)]"; if (!in_array($str,$found)) { # echo "$str\n"; $found[] = $str; } } #if ($progr++ % 10000 == 0) { # echo "(Dist=$distance) Processing ($a, $b, $c, $d, $e, $f, $g, $h) with power $power \r"; #} } if (file_exists(__DIR__.'/savestate.txt')) { $start_distance = trim(file_get_contents(__DIR__.'/savestate.txt')); } else { $start_distance = 0; } for ($distance=$start_distance; $distance<=MAX_DISTANCE; $distance++) { $str = "--------- Distance: $distance ---------"; echo " \r"; echo "$str\n"; $found = [ $str ]; $progr = 0; $a = $distance; for ($b=0; $b<=$distance; $b++) { for ($c=0; $c<=$distance; $c++) { for ($d=0; $d<=$distance; $d++) { for ($e=0; $e<=$distance; $e++) { for ($f=0; $f<=$distance; $f++) { for ($g=0; $g<=$distance; $g++) { for ($h=0; $h<=$distance; $h++) { for ($i=0; $i<=$distance; $i++) { for ($j=0; $j<=$distance; $j++) { for ($k=0; $k<=$distance; $k++) { for ($l=0; $l<=$distance; $l++) { for ($m=0; $m<=$distance; $m++) { for ($n=0; $n<=$distance; $n++) { for ($o=0; $o<=$distance; $o++) { for ($p=0; $p<=$distance; $p++) { if ($p == 0) echo "\r".round(memory_get_usage()/1024/1024, 2)." MiB (".count($found)." found); ($a), $b, $c, $d, $e, $f, $g, $h, $i, $j, $k, $l, $m, $n, $o, $p "; for ($power=2; $power<=MAX_POWER; $power++) { _go($a, $b, $c, $d, $e, $f, $g, $h, $i, $j, $k, $l, $m, $n, $o, $p, $power, $distance, $progr, $found); _go($b, $a, $c, $d, $e, $f, $g, $h, $i, $j, $k, $l, $m, $n, $o, $p, $power, $distance, $progr, $found); _go($b, $c, $a, $d, $e, $f, $g, $h, $i, $j, $k, $l, $m, $n, $o, $p, $power, $distance, $progr, $found); _go($b, $c, $d, $a, $e, $f, $g, $h, $i, $j, $k, $l, $m, $n, $o, $p, $power, $distance, $progr, $found); _go($b, $c, $d, $e, $a, $f, $g, $h, $i, $j, $k, $l, $m, $n, $o, $p, $power, $distance, $progr, $found); _go($b, $c, $d, $e, $f, $a, $g, $h, $i, $j, $k, $l, $m, $n, $o, $p, $power, $distance, $progr, $found); _go($b, $c, $d, $e, $f, $g, $a, $h, $i, $j, $k, $l, $m, $n, $o, $p, $power, $distance, $progr, $found); _go($b, $c, $d, $e, $f, $g, $h, $a, $i, $j, $k, $l, $m, $n, $o, $p, $power, $distance, $progr, $found); _go($b, $c, $d, $e, $f, $g, $h, $i, $a, $j, $k, $l, $m, $n, $o, $p, $power, $distance, $progr, $found); _go($b, $c, $d, $e, $f, $g, $h, $i, $j, $a, $k, $l, $m, $n, $o, $p, $power, $distance, $progr, $found); _go($b, $c, $d, $e, $f, $g, $h, $i, $j, $k, $a, $l, $m, $n, $o, $p, $power, $distance, $progr, $found); _go($b, $c, $d, $e, $f, $g, $h, $i, $j, $k, $l, $a, $m, $n, $o, $p, $power, $distance, $progr, $found); _go($b, $c, $d, $e, $f, $g, $h, $i, $j, $k, $l, $m, $a, $n, $o, $p, $power, $distance, $progr, $found); _go($b, $c, $d, $e, $f, $g, $h, $i, $j, $k, $l, $m, $n, $a, $o, $p, $power, $distance, $progr, $found); _go($b, $c, $d, $e, $f, $g, $h, $i, $j, $k, $l, $m, $n, $o, $a, $p, $power, $distance, $progr, $found); _go($b, $c, $d, $e, $f, $g, $h, $i, $j, $k, $l, $m, $n, $o, $p, $a, $power, $distance, $progr, $found); } } } } } } } } } } } } } } } } file_put_contents(__DIR__.'/result.txt', implode("\n",$found)."\n", FILE_APPEND); file_put_contents(__DIR__.'/savestate.txt', $distance+1); }