德科机试一星题001

由于原版没有PHP版本的答案,所以自己转了一下php语言

 

题目描述:

如果三个正整数A、B、C ,A²+B²=C²则为勾股数
如果ABC之间两两互质,即A与B,A与C,B与C均互质没有公约数,
则称其为勾股数元组。
请求出给定n~m范围内所有的勾股数元组

输入描述

起始范围
1 < n < 10000
n < 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;
}
View Code
posted @ 2022-07-12 09:37  weigm*  阅读(257)  评论(0)    收藏  举报