PageRenderTime 12ms CodeModel.GetById 0ms RepoModel.GetById 0ms app.codeStats 0ms

/prime_factor_sum.go

https://code.google.com/p/go-prime-factor-sum/
Go | 40 lines | 37 code | 3 blank | 0 comment | 9 complexity | c7d0c7d0a43f721ca7c8576ef046a236 MD5 | raw file
  1. package main
  2. import (
  3. "flag"
  4. "fmt"
  5. "os"
  6. )
  7. func PrimeFactorSum(n int) int {
  8. notPrime := make([]bool, n + 1)
  9. rem := n
  10. sum := 0
  11. nextPrime := 2
  12. for {
  13. if rem % nextPrime == 0 {
  14. sum += nextPrime
  15. for {
  16. rem /= nextPrime
  17. if rem % nextPrime != 0 {
  18. break
  19. }
  20. }
  21. }
  22. if rem <= 1 {
  23. break
  24. }
  25. last := n / nextPrime
  26. for i := 2; i <= last; i++ {
  27. notPrime[i * nextPrime] = true
  28. }
  29. for nextPrime = nextPrime + 1; notPrime[nextPrime]; nextPrime++ { }
  30. }
  31. return sum
  32. }
  33. func main() {
  34. n := flag.Int("n", 1, "Sum up unique prime factors of n")
  35. flag.Parse()
  36. fmt.Fprintf(os.Stdout, "%d\n", PrimeFactorSum(*n))
  37. }