diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..1c2d52b --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +.idea/* diff --git a/prime_factors_2021/prime_factors.go b/prime_factors_2021/prime_factors.go new file mode 100644 index 0000000..c845ee0 --- /dev/null +++ b/prime_factors_2021/prime_factors.go @@ -0,0 +1,17 @@ +package main + +func PrimeFactorsOf(n int) []int { + var ret = make([]int, 0) + var divider = 2 + for divider < n { + for n % divider == 0 { + ret = append(ret, divider) + n = n/divider + } + divider++ + } + if n > 1 { + ret = append(ret, n) + } + return ret +} diff --git a/prime_factors_2021/prime_factors_test.go b/prime_factors_2021/prime_factors_test.go new file mode 100644 index 0000000..7daf43b --- /dev/null +++ b/prime_factors_2021/prime_factors_test.go @@ -0,0 +1,68 @@ +package main + +import ( + "reflect" + "testing" +) + +func TestPrimeFactorsOf(t *testing.T) { + tt := []struct{ + name string + input int + want []int + }{ + { + "1", + 1, + []int{}, + }, + { + "2", + 2, + []int{2}, + }, + { + "3", + 3, + []int{3}, + }, + { + "4", + 4, + []int{2, 2}, + }, + { + "5", + 5, + []int{5}, + }, + { + "6", + 6, + []int{2, 3}, + }, + { + "7", + 7, + []int{7}, + }, + { + "8", + 8, + []int{2, 2, 2}, + }, + { + "9", + 9, + []int{3, 3}, + }, + } + for _, tc := range tt { + t.Run(tc.name, func(t *testing.T) { + got := PrimeFactorsOf(tc.input) + if !reflect.DeepEqual(got, tc.want) { + t.Errorf("PrimeFactorsOf %d = %v, want %v", tc.input, got, tc.want) + } + }) + } +} \ No newline at end of file