#### 重新写一道华为机试算法题
***
很少做算法题,上次做华为算法题没准备,做的时候完全是懵的,反倒是现在想起来了,就来说说这道题怎么做.
现在也只是记住当时的大概意思,将就着理解吧:
***
就是输入两个数N,M,且N<M,找出并打印N,M两个数之间互为质数的勾股数组,例如N=1,M=10,打印的结果为3,4,5(升序),而另一组勾股数6,8,10不是互质的就不打印,如果N,M,之间没有一组这样的数就打印NA.
***
由于忘了两个数互质的条件,当时没做出来,现在才想起来只要判断两个数的因数都没有2,3,5,那么这两个数就互质,现在一组数有三个,就要判断两两互质的情况,只要有一对数不互质就不满足三数互质.
代码奉上:
```
package main
import "fmt"
func tool(a, b, c int) bool {
//任意两个参数有约数2
if (a%2 == 0 && b%2 == 0) || (a%2 == 0 && c%2 == 0) || (b%2 == 0 && c%2 == 0) {
return false
}
//约数3
if (a%3 == 0 && b%3 == 0) || (a%3 == 0 && c%3 == 0) || (b%3 == 0 && c%3 == 0) {
return false
}
//约数5
if (a%5 == 0 && b%5 == 0) || (a%5 == 0 && c%5 == 0) || (b%5 == 0 && c%5 == 0) {
return false
}
return true
}
var n = 0 //标记组数
func main() {
N := 0
M := 0
fmt.Scan(&N)
fmt.Scan(&M)
for a := N; a < M-2; a++ {
aa := a * a
for b := a + 1; b < M-1; b++ {
bb := b * b
for c := b + 1; c <= M; c++ {
cc := c * c
if aa+bb == cc {
if tool(a, b, c) {
n++//组数+1
fmt.Println(a, b, c)
}
}
}
}
}
if n == 0 {
fmt.Println("NA")
}
}
```
有疑问加站长微信联系(非本文作者))