arnaucube
arnaucube/cryptofunPublic Self-hosted repository
cryptofun/prime/prime.go
prime/prime.goRaw
 1package prime
 2
 3import "math/rand"
 4
 5const (
 6	MaxPrime = 2000
 7	MinPrime = 500
 8)
 9
10func RandInt(min int, max int) int {
11	r := rand.Intn(max-min) + min
12	return r
13}
14func RandPrime(min int, max int) int {
15	primes := SieveOfEratosthenes(max)
16	randN := rand.Intn(len(primes)-0) + 0
17	return primes[randN]
18}
19
20// return list of primes less than N
21func SieveOfEratosthenes(N int) (primes []int) {
22	b := make([]bool, N)
23	for i := 2; i < N; i++ {
24		if b[i] == true {
25			continue
26		}
27		primes = append(primes, i)
28		for k := i * i; k < N; k += i {
29			b[k] = true
30		}
31	}
32	return
33}
34
35func Gcd(a, b int) int {
36	var bgcd func(a, b, res int) int
37	bgcd = func(a, b, res int) int {
38		switch {
39		case a == b:
40			return res * a
41		case a%2 == 0 && b%2 == 0:
42			return bgcd(a/2, b/2, 2*res)
43		case a%2 == 0:
44			return bgcd(a/2, b, res)
45		case b%2 == 0:
46			return bgcd(a, b/2, res)
47		case a > b:
48			return bgcd(a-b, b, res)
49		default:
50			return bgcd(a, b-a, res)
51		}
52	}
53	return bgcd(a, b, 1)
54}