github.com/traefik/yaegi@v0.15.1/_test/factor.go (about)

     1  package main
     2  
     3  import (
     4  	"fmt"
     5  	"math/big"
     6  )
     7  
     8  func main() {
     9  	// 157 bit n = pq with p ~= 78 bits
    10  	n := big.NewInt(0)
    11  	n.SetString("273966616513101251352941655302036077733021013991", 10)
    12  
    13  	i := big.NewInt(0)
    14  	// Set i to be p - 10e6
    15  	i.SetString("496968652506233112158689", 10)
    16  
    17  	// Move temp big int out here so no possible GC thrashing
    18  	temp := big.NewInt(0)
    19  	// Avoid creating the new bigint each time
    20  	two := big.NewInt(2)
    21  	for {
    22  		// Check if the odd number is a divisor of n
    23  		temp.Mod(n, i)
    24  		if temp.Sign() == 0 {
    25  			fmt.Println(i)
    26  			break
    27  		}
    28  
    29  		i.Add(i, two)
    30  	}
    31  }