49: prime permutations

This commit is contained in:
VicRen
2020-11-22 23:09:18 +08:00
parent c113d0f2d8
commit 3513724df0
2 changed files with 88 additions and 0 deletions

View File

@@ -0,0 +1,50 @@
package main
import "fmt"
func main() {
for a := 1489; a < 3340; a++ {
b := a + 3330
c := b + 3330
if isPrime(a) && isPrime(b) && isPrime(c) && isPerm(a, b) && isPerm(b, c) {
fmt.Println((a*10000+b)*10000 + c)
}
}
}
func isPrime(n int) bool {
if n <= 1 {
return false
}
res := n
//牛顿法求平方根
for res*res > n {
res = (res + n/res) / 2
}
divider := 2
for divider <= res {
if n%divider == 0 {
return false
}
divider++
}
return true
}
func isPerm(a, b int) bool {
cnt := []int{0, 0, 0, 0, 0, 0, 0, 0, 0, 0}
for a > 0 {
cnt[a%10]++
a = a / 10
}
for b > 0 {
cnt[b%10]--
b = b / 10
}
for _, n := range cnt {
if n != 0 {
return false
}
}
return true
}

View File

@@ -0,0 +1,38 @@
package main
import "testing"
func Test_isPerm(t *testing.T) {
type args struct {
a int
b int
}
tests := []struct {
name string
args args
want bool
}{
{
"test_1",
args{123, 321},
true,
},
{
"test_2",
args{123, 213},
true,
},
{
"test_3",
args{123, 211},
false,
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
if got := isPerm(tt.args.a, tt.args.b); got != tt.want {
t.Errorf("isPerm() = %v, want %v", got, tt.want)
}
})
}
}