022 - Cubic Cake(★2)

022 - Cubic Cake(★2)

キーワード

解説

問題 (opens in a new tab)

r×r×rr \times r \times r の正方形が作れるのは, a,b,ca, b, c がそれぞれ rr で割り切れるとき.
最大の rr を取れば良いので, GCD を求めれば良い.

GCD は次のように求められる.

func gcd(x, y int64) int64 {
	if x < y {
		x, y = y, x
	}
	for y > 0 {
		x, y = y, x%y
	}
	return x
}
 

あるいは, 再帰を用いて次のように書くこともできる.

func gcd(x, y int64) int64 {
	if y == 0 {
		return x
	}
 
	return gcd(y, x%y)
}

提出コード

func gcd(x, y int64) int64 {
	if x < y {
		x, y = y, x
	}
	for y > 0 {
		x, y = y, x%y
	}
	return x
}
 
func main() {
	abc := readLongs()
	a, b, c := abc[0], abc[1], abc[2]
	g := gcd(a, gcd(b, c))
	writeLine(a/g + b/g + c/g - 3)
}