mirror of
https://github.com/cubixle/codekata-golang.git
synced 2026-04-24 23:04:42 +01:00
27: quadratic primes
This commit is contained in:
50
27_quadratic_primes/main.go
Normal file
50
27_quadratic_primes/main.go
Normal file
@@ -0,0 +1,50 @@
|
|||||||
|
package main
|
||||||
|
|
||||||
|
import "fmt"
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
maxN := 0
|
||||||
|
maxA := 0
|
||||||
|
maxB := 0
|
||||||
|
|
||||||
|
cm := 0
|
||||||
|
for a := -999; a < 1000; a += 2 {
|
||||||
|
for b := 3; b < 1000; b += 2 {
|
||||||
|
fmt.Println("a:", a, "b:", b)
|
||||||
|
cm = findMaxN(a, b)
|
||||||
|
if cm > maxN {
|
||||||
|
maxN = cm
|
||||||
|
maxA = a
|
||||||
|
maxB = b
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fmt.Println("product is:", maxA*maxB)
|
||||||
|
}
|
||||||
|
|
||||||
|
func findMaxN(a, b int) int {
|
||||||
|
max := 0
|
||||||
|
n := 2
|
||||||
|
for isPrime(n*n + a*n + b) {
|
||||||
|
if n > max {
|
||||||
|
max = n
|
||||||
|
}
|
||||||
|
n++
|
||||||
|
}
|
||||||
|
return max
|
||||||
|
}
|
||||||
|
|
||||||
|
func isPrime(n int) bool {
|
||||||
|
if n <= 1 {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
divider := 2
|
||||||
|
for divider < n {
|
||||||
|
if n%divider == 0 {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
divider++
|
||||||
|
}
|
||||||
|
return true
|
||||||
|
}
|
||||||
62
27_quadratic_primes/main_test.go
Normal file
62
27_quadratic_primes/main_test.go
Normal file
@@ -0,0 +1,62 @@
|
|||||||
|
package main
|
||||||
|
|
||||||
|
import "testing"
|
||||||
|
|
||||||
|
func Test_isPrime(t *testing.T) {
|
||||||
|
type args struct {
|
||||||
|
n int
|
||||||
|
}
|
||||||
|
tt := []struct {
|
||||||
|
name string
|
||||||
|
args args
|
||||||
|
want bool
|
||||||
|
}{
|
||||||
|
{
|
||||||
|
"1",
|
||||||
|
args{1},
|
||||||
|
false,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"2",
|
||||||
|
args{2},
|
||||||
|
true,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"4",
|
||||||
|
args{4},
|
||||||
|
false,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"17",
|
||||||
|
args{17},
|
||||||
|
true,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"37",
|
||||||
|
args{37},
|
||||||
|
true,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"73",
|
||||||
|
args{73},
|
||||||
|
true,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"13 * 3 * 5 * 5 * 17 * 31 * 737",
|
||||||
|
args{3 * 3 * 5 * 5 * 17 * 31 * 73},
|
||||||
|
false,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"large_one",
|
||||||
|
args{2876*2876 - 63*2876 + 977},
|
||||||
|
false,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
for _, tc := range tt {
|
||||||
|
t.Run(tc.name, func(t *testing.T) {
|
||||||
|
if got := isPrime(tc.args.n); got != tc.want {
|
||||||
|
t.Errorf("isPrime() = %v, want %v", got, tc.want)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user