From e1fd77f4a2fdb0eb439263a6f6ce8147db134d92 Mon Sep 17 00:00:00 2001 From: VicRen Date: Fri, 2 Oct 2020 20:21:27 +0800 Subject: [PATCH] largest prime factor --- .../largest_prime_factor_test.go | 41 +++++++++++++++++++ largest_prime_factor/main.go | 23 +++++++++++ 2 files changed, 64 insertions(+) create mode 100644 largest_prime_factor/largest_prime_factor_test.go create mode 100644 largest_prime_factor/main.go diff --git a/largest_prime_factor/largest_prime_factor_test.go b/largest_prime_factor/largest_prime_factor_test.go new file mode 100644 index 0000000..6f4832e --- /dev/null +++ b/largest_prime_factor/largest_prime_factor_test.go @@ -0,0 +1,41 @@ +package main + +import "testing" + +func TestLargestPrimeFactor(t *testing.T) { + tt := []struct { + name string + input int + want int + }{ + { + "largest prime factor of 1", + 1, + 1, + }, + { + "largest prime factor of 2", + 2, + 2, + }, + { + "largest prime factor of 4", + 4, + 2, + }, + { + "largest prime factor of a large number", + 2 * 2 * 2 * 3 * 3 * 5 * 17 * 37, + 37, + }, + } + + for _, tc := range tt { + t.Run(tc.name, func(t *testing.T) { + got := LargestPrimeFactor(tc.input) + if got != tc.want { + t.Errorf("LargestPrimeFactor(%d)=%d, want %d", tc.input, got, tc.want) + } + }) + } +} diff --git a/largest_prime_factor/main.go b/largest_prime_factor/main.go new file mode 100644 index 0000000..c025bb7 --- /dev/null +++ b/largest_prime_factor/main.go @@ -0,0 +1,23 @@ +package main + +import "fmt" + +func main() { + fmt.Println("the largest prime factor of 600851475143 is", LargestPrimeFactor(600851475143)) +} + +func LargestPrimeFactor(n int) int { + divider := 2 + for divider < n { + for n%divider == 0 { + n /= divider + } + divider++ + } + if n > 1 { + return n + } else { + divider-- + return divider + } +}