Wir entschuldigen uns für diese lästige und unsinnige Cookie-Warnung, die uns die EU-DSGVO und das BDSG (neu) seit Mai 2018 abverlangt! Natürlich verwendet archium "Cookies". Wir verwenden Cookies ausschließlich aus technischen Gründen, z.B. zum Speichern von Session-Parametern, damit wir selber uns nicht andauernd neu anmelden müssen, wenn wir an der eigenen Seite basteln. Für den Inhalt der Besucher-Cookies interessieren wir uns nicht; wir haben in 12 Jahren nicht eine einzige individuelle Besucher-Information abgegriffen und werden das auch zukünftig nicht tun. Die die Durchsetzung des Datenschutzes überwachenden Aufsichtsbehörden der Länder 👁👁 erwarten jetzt von Ihnen, daß Sie Ihr Einverständnis mit unseren Cookies erklären und die Verantwortung für Ihr Handeln übernehmen indem Sie auf "Okay" klicken: Weitere Informationen

BenchmarkPzfGo

Aus archium
Wechseln zu:Navigation, Suche
package main

import (
	"fmt"
	"math"
	"time"
)

var testzahl int = 12361423

func isPrim(n *int) bool {
	if *n <= 2 && *n > 0 {
		return true
	} else if *n%2 == 0 {
		return false // Gerade Zahlen > 2 sind keine Primzahlen
	} else {
		for i := 3; i <= int(math.Sqrt(float64(*n))); i += 2 {
			if *n%i == 0 {
				return false
			}
		}
		return true
	}
}

func main() {
	t0 := time.Now().UnixNano()
Lfor0:
	for peins := 1; peins < testzahl; peins += 2 {
		if isPrim(&peins) {
		Lfor1:
			for pzwei := 1; pzwei < testzahl; pzwei += 2 {
				if isPrim(&pzwei) {
					if testzahl == (peins * pzwei) {
						fmt.Printf("[Go1l] Erfolgreich beendet bei %v * %v = %v\n", peins, pzwei, testzahl)
						break Lfor0
					} else if testzahl < (peins * pzwei) {
						break Lfor1
					}
				}
			}
		}
	}
	t1 := time.Now().UnixNano()
	fmt.Printf("[Go1l] Iterative Ermittlung: %.3f Sekunden\n\n", float64(t1-t0)*math.Pow(10, -9))

	t2 := time.Now().UnixNano()
	for peins := testzahl - 1; peins > 0; peins-- {
		if isPrim(&peins) {
			if pzwei := (testzahl / peins); testzahl%peins == 0 &&
				isPrim(&pzwei) {
				fmt.Printf("[Go2] Erfolgreich beendet bei %v * %v = %v\n", peins, pzwei, testzahl)
				break

			}
		}
	}
	t3 := time.Now().UnixNano()
	fmt.Printf("[Go2] Iterative Ermittlung mit Division (Benischek-Verfahren): %.3f Sekunden\n\n", float64(t3-t2)*math.Pow(10, -9))
}