// 1. hét – Példa algoritmus: legnagyobb közös osztó (Euklidesz)
// Futtatás: go run ./h01/gcd
package main

import "fmt"

// Pszeudokód:
//
//	Függvény LNKO(a, b)
//	  Ciklus amíg b ≠ 0
//	    m ← a mod b ; a ← b ; b ← m
//	  Ciklus vége
//	  Vissza: a
//	Függvény vége
func gcd(a, b int) int {
	for b != 0 {
		a, b = b, a%b // párhuzamos értékadás: nem kell segédváltozó
	}
	return a
}

// Ugyanez a lépések kiírásával.
func gcdTrace(a, b int) int {
	fmt.Printf("%6s %6s %6s\n", "a", "b", "a mod b")
	for b != 0 {
		fmt.Printf("%6d %6d %6d\n", a, b, a%b)
		a, b = b, a%b
	}
	return a
}

func main() {
	fmt.Println("LNKO(48, 18) =", gcd(48, 18))
	fmt.Println()
	r := gcdTrace(1071, 462)
	fmt.Println("LNKO(1071, 462) =", r)
}
