summaryrefslogtreecommitdiff
path: root/factors/mtc.go
diff options
context:
space:
mode:
Diffstat (limited to 'factors/mtc.go')
-rw-r--r--factors/mtc.go17
1 files changed, 14 insertions, 3 deletions
diff --git a/factors/mtc.go b/factors/mtc.go
index 024391e..4d40396 100644
--- a/factors/mtc.go
+++ b/factors/mtc.go
@@ -3,10 +3,21 @@ package factors
// MTC returns the multiplication table complexity of a radix n.
// This is an estimate of how difficult it is to learn a radix's
// multiplication table.
-func MTC(n uint32) uint64 {
+//
+// The MTC is a sum of each digit's row complexity,
+// which is the length of the pattern of the product's last digit
+// (equal to digit / gcd(digit, radix)).
+// Digits 1 and radix - 1 are excluded because they have simpler patterns
+// than the other digits.
+//
+// uint32 is used as the input type and uint64 as the output to prevent
+// integer overflow (and because the MTC algorithm is slow).
+//
+// The MTC of 0 and 1 are both zero.
+func MTC(radix uint32) uint64 {
mtc := uint64(0)
- for i := uint32(2); i <= n-2; i++ {
- mtc += uint64(n / gcd(i, n))
+ for digit := uint32(2); digit <= radix-2; digit++ {
+ mtc += uint64(radix / gcd(digit, radix))
}
return mtc
}