55 lines
		
	
	
		
			924 B
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			55 lines
		
	
	
		
			924 B
		
	
	
	
		
			Go
		
	
	
	
	
	
package ar
 | 
						|
 | 
						|
import "math/big"
 | 
						|
 | 
						|
const lenops int64 = 9
 | 
						|
 | 
						|
type OpsFunc func(a, b *big.Int) *big.Int
 | 
						|
 | 
						|
var ops [lenops]OpsFunc
 | 
						|
 | 
						|
func init() {
 | 
						|
	ops[0] = Add
 | 
						|
	ops[1] = Mul
 | 
						|
	ops[2] = Mod
 | 
						|
	ops[3] = Xor
 | 
						|
	ops[4] = And
 | 
						|
	ops[5] = Or
 | 
						|
	ops[6] = Sub1
 | 
						|
	ops[7] = XorSub
 | 
						|
	ops[8] = Rsh
 | 
						|
}
 | 
						|
 | 
						|
func Add(x, y *big.Int) *big.Int {
 | 
						|
	return new(big.Int).Add(x, y)
 | 
						|
}
 | 
						|
func Mul(x, y *big.Int) *big.Int {
 | 
						|
	return new(big.Int).Mul(x, y)
 | 
						|
}
 | 
						|
func Mod(x, y *big.Int) *big.Int {
 | 
						|
	return new(big.Int).Mod(x, y)
 | 
						|
}
 | 
						|
func Xor(x, y *big.Int) *big.Int {
 | 
						|
	return new(big.Int).Xor(x, y)
 | 
						|
}
 | 
						|
func And(x, y *big.Int) *big.Int {
 | 
						|
	return new(big.Int).And(x, y)
 | 
						|
}
 | 
						|
func Or(x, y *big.Int) *big.Int {
 | 
						|
	return new(big.Int).Or(x, y)
 | 
						|
}
 | 
						|
func Sub1(x, y *big.Int) *big.Int {
 | 
						|
	a := big.NewInt(-1)
 | 
						|
	a.Sub(a, x)
 | 
						|
 | 
						|
	return a
 | 
						|
}
 | 
						|
func XorSub(x, y *big.Int) *big.Int {
 | 
						|
	t := Sub1(x, nil)
 | 
						|
 | 
						|
	return t.Xor(t, y)
 | 
						|
}
 | 
						|
func Rsh(x, y *big.Int) *big.Int {
 | 
						|
	return new(big.Int).Rsh(x, uint(y.Uint64()%64))
 | 
						|
}
 |