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