package factors // TotativeRatio calculates the fraction of numbers less than n that // are totatives of n (share no factors with n) func TotativeRatio(n uint) float64 { if n == 0 { panic("0 has no totative ratio!") } primeFactorization := PrimeFactorize(n) num, denom := uint(1), uint(1) for p := range primeFactorization.exponents { num *= p - 1 denom *= p } return float64(num) / float64(denom) }