aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Manring <michael@manring>2022-06-07 15:30:44 +0700
committerMichael Manring <michael@manring>2022-06-07 19:48:55 +0700
commitdf3ae74efc5d4c300be815c37001376db61d7ab6 (patch)
treed0d23535f3afdea8ff78c2585c2c92fdabf4c519
parent9987fe65d9f68748f64a76ffe4d94320f4b9fb57 (diff)
downloadperlweeklychallenge-club-df3ae74efc5d4c300be815c37001376db61d7ab6.tar.gz
perlweeklychallenge-club-df3ae74efc5d4c300be815c37001376db61d7ab6.tar.bz2
perlweeklychallenge-club-df3ae74efc5d4c300be815c37001376db61d7ab6.zip
support 48 but still very slow
-rw-r--r--challenge-168/pokgopun/go/ch-2.go52
1 files changed, 39 insertions, 13 deletions
diff --git a/challenge-168/pokgopun/go/ch-2.go b/challenge-168/pokgopun/go/ch-2.go
index 973b8dee4e..59d4413c81 100644
--- a/challenge-168/pokgopun/go/ch-2.go
+++ b/challenge-168/pokgopun/go/ch-2.go
@@ -11,7 +11,8 @@ import (
func main() {
var hp homePrime
- hp.buildPrime(1_000_000)
+ hp.buildPrime(5_000_000, 0)
+ //fmt.Println(hp.plist, len(hp.plist))
if len(os.Args) > 1 {
for _, v := range os.Args[1:] {
n, err := strconv.Atoi(v)
@@ -55,22 +56,42 @@ func (hp homePrime) find(n int) *big.Int {
return bi
}
-func (hp *homePrime) buildPrime(n int) {
+func (hp *homePrime) buildPrime(n int, o int) {
hp.pmap = make([]bool, int(n)+1)
- for i := 2; i <= n; i++ {
+ //for i := 2; i <= n; i++ {
+ for i := 1; i <= n; i++ {
hp.pmap[i] = true
}
- for i := 2; float64(i) <= math.Sqrt(float64(n)); i++ {
+ if o < 1 {
+ hp.pmap[1] = false
+ }
+ //for i := 2; float64(i) <= math.Sqrt(float64(n)); i++ {
+ for i := 2; float64(i) <= math.Sqrt(float64(n+o)); i++ {
j := i * i
- for j <= n {
- hp.pmap[j] = false
+ /*
+ for j <= n {
+ hp.pmap[j] = false
+ j += i
+ }
+ */
+ for j <= n+o {
+ if j > o {
+ hp.pmap[j-o] = false
+ }
j += i
}
-
}
- for i := 2; i < len(hp.pmap); i++ {
+ hp.plist = []int{}
+ /*
+ for i := 2; i < len(hp.pmap); i++ {
+ if hp.pmap[i] {
+ hp.plist = append(hp.plist, i)
+ }
+ }
+ */
+ for i := 1; i < len(hp.pmap); i++ {
if hp.pmap[i] {
- hp.plist = append(hp.plist, i)
+ hp.plist = append(hp.plist, i+o)
}
}
}
@@ -90,14 +111,19 @@ func (hp *homePrime) factor(n *big.Int) (s []int) {
i := 0
m := new(big.Int)
nextPrime := big.NewInt(2)
+ if hp.plist[0] != 2 {
+ hp.buildPrime(5_000_000, 0)
+ }
+ o := 0
for {
-
if m.Mod(n, nextPrime).Cmp(big.NewInt(0)) != 0 {
i++
if i+1 > len(hp.plist) {
- l := len(hp.pmap)
- if l < 1_000_000_000 {
- hp.buildPrime(l * 1_000)
+ if o < 100_000_000_000 {
+ //hp.buildPrime(l * 1_000)
+ o += 5_000_000
+ hp.buildPrime(5_000_000, o)
+ i = 0
} else {
return []int{}
}