Pages

Showing posts with label big. Show all posts
Showing posts with label big. Show all posts

Wednesday, July 13, 2011

Problem #20

Problem link
Solution:
package main

import (
"big"
"strconv"
)

func main() {
mul := big.NewInt(1)
for i := 2; i <= 100; i++ {
mul.Mul(mul, big.NewInt(int64(i)))
}
result, digit := 0, 0
for i := range mul.String() {
digit, _ = strconv.Atoi(string(mul.String()[i]))
result += digit
}
println(result)
}



Result: 648
Time: 0m0.023s

Problem #25

Problem link
Solution:
package main

import (
"big"
)

func main() {
a, b, c, counter := big.NewInt(int64(1)), big.NewInt(int64(2)), big.NewInt(int64(0)), 2
for len(a.String()) < 1000 {
c.Neg(a) //c is a temp variable
a.Add(a, b)
b.Neg(c)
counter++
}
println(counter)
}



Result: 4782
Time: 0m2.108s

Problem #26

Problem link
Solution:
package main

import (
"big"
)

//using Fermat's little theorem we need to find the largest prime less than 1000
//see details: http://en.wikipedia.org/wiki/Repeating_decimal#Fractions_with_prime_denominators

func main() {
//find primes
arr := make([]bool, 1000)
arr[0], arr[1] = true, true
prime := 3
var k int
for {
for k = prime * 2; k < len(arr); k += prime {
arr[k] = true
}
for k = prime + 2; k < len(arr) && arr[k]; k += 2 {
}
if k < len(arr) {
prime = k
} else {
break
}
}

//iterate over primes in reverse direction
b := big.NewInt(0)
var i int
for k = prime; k > 0; k -= 2 {
if !arr[k] && k%2 != 0 {
inner:
for i = 1; i < k; i++ {
if b.Mod(b.Sub(b.Exp(big.NewInt(10), big.NewInt(int64(i)), nil), big.NewInt(1)), big.NewInt(int64(k))).Int64() == 0 {
break inner
}
}
if k-i == 1 {
println(k)
return
}
}
}
}



Result: 983
Time: 0m0.041s

Problem #29

Problem link
Solution:
package main

import (
"big"
)

func main() {
strMap := make(map[string]int)
for a := 2; a < 101; a++ {
for b := 2; b < 101; b++ {
bigA := big.NewInt(int64(a))
bigB := big.NewInt(int64(b))
bigA.Exp(bigA, bigB, nil)
strMap[bigA.String()] = 0
}
}
println(len(strMap))
}



Result: 9183
Time: 0m0.300s

Problem #48

Problem link
Solution:
package main

import (
"big"
)

func main() {
result := big.NewInt(0)
power := big.NewInt(0)
var number *big.Int
for i := 1; i < 1001; i++ {
number = big.NewInt(int64(i))
power.Exp(number, number, nil)
result.Add(result, power)
}
str := result.String()
println(str[len(str)-10 : len(str)])
}



Result: 9110846700
Time: 0m0.090s