use POSIX; for ($i = 2; $i <= 10000; $i++) { next if (sqrt($i) == int(sqrt($i))); $n = floor(sqrt($i)); #get the first num $found = 0; $s = sqrt($i); $denominator = $s - $n; #decimal value left $z = $n; #z = 4 $numerator = $lastNum = 1; %seen = (); $c = 0; while (! $found) { $c++; $lastNum = $numerator; $numerator = $numerator * ($s + $z); $denominator = sprintf("%.1f",($denominator * ($s + $z))); #this will be an integer $n = floor($numerator / $denominator); #find over amount $z = sprintf("%.1f",-1 * (($numerator - $n * $denominator) / $lastNum - $s)); $denominator = sprintf("%.1f",$denominator / $lastNum); $found = 1 if ($seen{$denominator . ',' . $z . ',' . $lastNum} == 1 && ($c > 1)); $seen{$denominator . ',' . $z . ',' . $lastNum} = 1 if ($c > 1); $numerator = $denominator; #flip $denominator = $s - $z; } $count++ if ($c > 0 && ($c % 2 == 1)); } print "Total: $count\n";