德科机试一星题001
由于原版没有PHP版本的答案,所以自己转了一下php语言
题目描述:
如果三个正整数A、B、C ,A²+B²=C²则为勾股数
如果ABC之间两两互质,即A与B,A与C,B与C均互质没有公约数,
则称其为勾股数元组。
请求出给定n~m范围内所有的勾股数元组
输入描述
起始范围1 < n < 10000n < m < 10000
输出描述
ABC保证A<B<C
输出格式A B C
多组勾股数元组,按照A B C升序的排序方式输出。
若给定范围内,找不到勾股数元组时,输出Na。
php代码如下:
1 class main{ 2 public function test() 3 { 4 $n=fgets(STDIN); 5 $m=fgets(STDIN); 6 self::solution($n,$m); 7 } 8 9 private static function solution($n, $m) 10 { 11 $count=0; 12 for($a=$n+1;$a<$m-1;$a++){ 13 for($b=$a+1;$b<$m;$b++){ 14 for ($c=$b+1;$c<$m+1;$c++){ 15 if(self::relativelyPrime($a,$b)&&self::relativelyPrime($b,$c)&&self::relativelyPrime($a,$c)&&($a*$a+$b*$b==$c*$c)){ 16 $count++; 17 echo $a." ".$b." ".$c; 18 echo "<br>"; 19 } 20 } 21 } 22 } 23 if($count==0){ 24 echo "Na"; 25 } 26 } 27 28 private static function relativelyPrime($x, $y) 29 { 30 $a = min($x, $y); 31 $sqrt = sqrt($a); 32 for ($i = 2; $i < $sqrt; $i++) { 33 if ($x % $i == 0 && $y % $i == 0) { 34 return false; 35 } 36 } 37 return true; 38 } 39 } 40 41
牛客网测试:
<?php $n = fgets(STDIN); $m = fgets(STDIN); solution($n, $m); function solution($n, $m) { $count = 0; for ($a = $n + 1; $a < $m - 1; $a++) { for ($b = $a + 1; $b < $m; $b++) { for ($c = $b + 1; $c < $m + 1; $c++) { if (relativelyPrime($a, $b) && relativelyPrime($b, $c) && relativelyPrime($a, $c) && ($a * $a + $b * $b == $c * $c)) { $count++; echo $a . " " . $b . " " . $c; echo "<br>"; } } } } if ($count == 0) { echo "Na"; } } function relativelyPrime($x, $y) { $a = min($x, $y); $sqrt = sqrt($a); for ($i = 2; $i < $sqrt; $i++) { if ($x % $i == 0 && $y % $i == 0) { return false; } } return true; }

浙公网安备 33010602011771号