Skip to content

Commit 294aef3

Browse files
author
openset
committed
Add: Perfect Number
1 parent 0bccb04 commit 294aef3

File tree

2 files changed

+76
-0
lines changed

2 files changed

+76
-0
lines changed
+30
Original file line numberDiff line numberDiff line change
@@ -1 +1,31 @@
11
package problem507
2+
3+
// Solution 1
4+
func checkPerfectNumber(num int) bool {
5+
if num < 6 {
6+
return false
7+
}
8+
sum, mid := 1, num
9+
for i := 2; i < mid; i++ {
10+
if num%i == 0 {
11+
n := num / i
12+
sum += i + n
13+
if mid > n {
14+
mid = n
15+
}
16+
}
17+
}
18+
return sum == num
19+
}
20+
21+
// Solution 2
22+
func checkPerfectNumber2(num int) bool {
23+
m := map[int]bool{
24+
6: true,
25+
28: true,
26+
496: true,
27+
8128: true,
28+
33550336: true,
29+
}
30+
return m[num]
31+
}
Original file line numberDiff line numberDiff line change
@@ -1 +1,47 @@
11
package problem507
2+
3+
import "testing"
4+
5+
type testType struct {
6+
in int
7+
want bool
8+
}
9+
10+
func TestCheckPerfectNumber(t *testing.T) {
11+
tests := [...]testType{
12+
{
13+
in: 28,
14+
want: true,
15+
},
16+
{
17+
in: 6,
18+
want: true,
19+
},
20+
{
21+
in: 24,
22+
want: false,
23+
},
24+
{
25+
in: 1,
26+
want: false,
27+
},
28+
{
29+
in: 33550336,
30+
want: true,
31+
},
32+
}
33+
// Solution 1
34+
for _, tt := range tests {
35+
got := checkPerfectNumber(tt.in)
36+
if got != tt.want {
37+
t.Fatalf("in: %v, got: %v, want: %v", tt.in, got, tt.want)
38+
}
39+
}
40+
// Solution 2
41+
for _, tt := range tests {
42+
got := checkPerfectNumber2(tt.in)
43+
if got != tt.want {
44+
t.Fatalf("in: %v, got: %v, want: %v", tt.in, got, tt.want)
45+
}
46+
}
47+
}

0 commit comments

Comments
 (0)