From 64d25a8714ac670d1667b078afb81335ea9bbb2b Mon Sep 17 00:00:00 2001 From: VicRen Date: Tue, 20 Oct 2020 15:07:14 +0800 Subject: [PATCH] 21: amicable numbers --- 21_amicable_numbers/amicable_test.go | 56 ++++++++++++++++++++++++++++ 21_amicable_numbers/main.go | 34 +++++++++++++++++ 2 files changed, 90 insertions(+) create mode 100644 21_amicable_numbers/amicable_test.go create mode 100644 21_amicable_numbers/main.go diff --git a/21_amicable_numbers/amicable_test.go b/21_amicable_numbers/amicable_test.go new file mode 100644 index 0000000..59a684b --- /dev/null +++ b/21_amicable_numbers/amicable_test.go @@ -0,0 +1,56 @@ +package main + +import ( + "testing" +) + +func Test_sumOfDivisors(t *testing.T) { + tt := []struct { + name string + input int + want int + }{ + { + "220", + 220, + 284, + }, + } + + for _, tc := range tt { + t.Run(tc.name, func(t *testing.T) { + got := sumOfDivisors(tc.input) + if got != tc.want { + t.Errorf("sumOfDivisors() = %d, want %d", got, tc.want) + } + }) + } +} + +func Test_isAmicableNumber(t *testing.T) { + tt := []struct { + name string + input int + want bool + }{ + { + "220", + 220, + true, + }, + { + "221", + 221, + false, + }, + } + + for _, tc := range tt { + t.Run(tc.name, func(t *testing.T) { + got := isAmicableNumber(tc.input) + if got != tc.want { + t.Errorf("isAmicableNumber() = %v, want %v", got, tc.want) + } + }) + } +} diff --git a/21_amicable_numbers/main.go b/21_amicable_numbers/main.go new file mode 100644 index 0000000..d673161 --- /dev/null +++ b/21_amicable_numbers/main.go @@ -0,0 +1,34 @@ +package main + +import "fmt" + +func main() { + var nums []int + sum := 0 + for i := 1; i < 10000; i++ { + if isAmicableNumber(i) { + nums = append(nums, i) + sum += i + } + } + fmt.Println("sum:", sum, "nums:", nums) +} + +func sumOfDivisors(input int) int { + sum := 0 + for i := 1; i <= input/2; i++ { + if input%i == 0 { + sum += i + } + } + return sum +} + +func isAmicableNumber(input int) bool { + da := sumOfDivisors(input) + db := sumOfDivisors(da) + if da == db { + return false + } + return input == db +}