From 564e53cdd4d6fc8b611d59c2c19af42864e6ece4 Mon Sep 17 00:00:00 2001 From: Adrien Hopkins Date: Mon, 7 Aug 2023 16:34:47 -0500 Subject: Add totative ratio and factor score to program --- factors/totative.go | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 factors/totative.go (limited to 'factors/totative.go') diff --git a/factors/totative.go b/factors/totative.go new file mode 100644 index 0000000..558f0f0 --- /dev/null +++ b/factors/totative.go @@ -0,0 +1,17 @@ +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) + + totativeRatio := 1.0 + for p := range primeFactorization.exponents { + totativeRatio *= float64(p - 1) / float64(p) + } + return totativeRatio +} -- cgit v1.2.3