Advertisement
apexsquirt

[PHP-CLI] ℂ roots of integer coefficient 2nd deg polynomials

Jun 28th, 2018
252
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 1.87 KB | None | 0 0
  1. <?php
  2.  
  3. $upper = 20; //the range of $a, $b, $c will be [|-$upper,$upper|].
  4. $jump = 1; //shows only 1 out of $jump polynomials.
  5.  
  6. function is_prime($n) {
  7.     $s = 0;
  8.     for ($i = 1; $i <= floor(sqrt($n)); $i++) {
  9.         $s += floor($n/$i)-floor(($n-1)/$i);
  10.     }
  11.     if ($s == 1 && $n != 1) { return true; }
  12.     else { return false; }
  13. }
  14. function deg2($a,$b,$c) {
  15.     if ($b**2-4*$a*$c >= 0) {
  16.         return [[(-$b-sqrt($b**2-4*$a*$c))/(2*$a),0],[(-$b+sqrt($b**2-4*$a*$c))/(2*$a),0]];
  17.     } elseif ($b**2-4*$a*$c < 0) {
  18.         return [[-$b/(2*$a),-sqrt(abs($b**2-4*$a*$c))/(2*$a)],[-$b/(2*$a),sqrt(abs($b**2-4*$a*$c))/(2*$a)]];
  19.     } elseif ($a == 0) {
  20.         return [[0,0],[0,0]];
  21.     }
  22. }
  23. $s = 0;
  24. $t = 0;
  25. $str = "";
  26. $geq = 0;
  27. $lss = 0;
  28. for ($a = -$upper; $a <= $upper; $a++) {
  29. for ($b = -$upper; $b <= $upper; $b++) {
  30. for ($c = -$upper; $c <= $upper; $c++) {
  31.     if ($a != 0 && $t % $jump == 0) {
  32.         $d2 = deg2($a,$b,$c);
  33.         $d20 = $d2[0];
  34.         $d21 = $d2[1];
  35.         if ($d20[1] != 0) {
  36.             if ($b/(2*$a) >= 1/2) { $geq++; } //fsr it didn't take the x²+x+c polynomials
  37.             else { $lss++; }
  38.             $str .= "<div style='position: absolute; left: ".(abs($d20[0]+$upper)*16-$upper*13+10)."; top: ".(abs($d20[1]+$upper)*16-$upper*13+10).
  39.             "; color: rgba(".(($upper+$a)/$upper+$upper).",".(($upper+$b)/$upper*127.5).",".(($upper+$c)/$upper*127.5).",".
  40.             (1-2*$t/($upper**4)).")'>&middot;</div>\n";
  41.             $str .= "<div style='position: absolute; left: ".(abs($d21[0]+$upper)*16-$upper*13+10)."; top: ".(abs($d21[1]+$upper)*16-$upper*13+10).
  42.             "; color: rgba(".(($upper+$a)/$upper*127.5).",".    (($upper+$b)/$upper*127.5).",".(($upper+$c)/$upper*127.5).",".
  43.             (1-2*$t/($upper**4)).")' poly='{$a}x²+{$b}x+{$c}'>&middot;</div>\n";
  44.             $s++;
  45.         } $s++;
  46.     $t++;} else { $t++; }
  47. }}}
  48. print "\n".round(($lss/($geq+$lss))*100,3)."% roots have a real part less than or equal to 1/2\n";
  49. file_put_contents("ajhfeaog.html","<body bgcolor='black'>\n".$str);
  50. ?>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement