Golang算法模板-数学知识

51 阅读1分钟

辗转相除求gcd

func GetGCD(a, b int) int {
    for b != 0 {
        temp := b
        b = a % b
        a = temp
    }
    return a
}
func GetGCD2(a, b int) int {
    if b == 0 {
        return a
    }
    return GetGCD2(b, a%b)
}
func main() {
    fmt.Printf("%d\n", GetGCD(6, 9))
    fmt.Printf("%d\n", GetGCD2(6, 9))
}

素数筛

其主要原理就是从2开始如果一个数时素数,那么这个素数乘任何正整数一定是合数。 这里用一个标记数组记录某一个数是不是素数。

func main() {
    const n = 100005
    var primeFlag = [n]int{1, 1}
    for i := 2; i <= int(math.Sqrt(float64(n))); i++ {
        if primeFlag[i] == 0 {
            for j := 2; i*j < n; j++ {
                primeFlag[i*j] = 1
            }
        }
    }
    for i := 1; i < n; i++ {
        if primeFlag[i] == 0 {
            fmt.Printf("%d, ", i)
        }
    }
}