Data commit
This commit is contained in:
parent
7387c8f97b
commit
cb5bb5e222
199093 changed files with 3378972 additions and 0 deletions
83
Task/Smith-numbers/Go/smith-numbers.go
Normal file
83
Task/Smith-numbers/Go/smith-numbers.go
Normal file
|
|
@ -0,0 +1,83 @@
|
|||
package main
|
||||
|
||||
import "fmt"
|
||||
|
||||
func numPrimeFactors(x uint) int {
|
||||
var p uint = 2
|
||||
var pf int
|
||||
if x == 1 {
|
||||
return 1
|
||||
}
|
||||
for {
|
||||
if (x % p) == 0 {
|
||||
pf++
|
||||
x /= p
|
||||
if x == 1 {
|
||||
return pf
|
||||
}
|
||||
} else {
|
||||
p++
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func primeFactors(x uint, arr []uint) {
|
||||
var p uint = 2
|
||||
var pf int
|
||||
if x == 1 {
|
||||
arr[pf] = 1
|
||||
return
|
||||
}
|
||||
for {
|
||||
if (x % p) == 0 {
|
||||
arr[pf] = p
|
||||
pf++
|
||||
x /= p
|
||||
if x == 1 {
|
||||
return
|
||||
}
|
||||
} else {
|
||||
p++
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func sumDigits(x uint) uint {
|
||||
var sum uint
|
||||
for x != 0 {
|
||||
sum += x % 10
|
||||
x /= 10
|
||||
}
|
||||
return sum
|
||||
}
|
||||
|
||||
func sumFactors(arr []uint, size int) uint {
|
||||
var sum uint
|
||||
for a := 0; a < size; a++ {
|
||||
sum += sumDigits(arr[a])
|
||||
}
|
||||
return sum
|
||||
}
|
||||
|
||||
func listAllSmithNumbers(maxSmith uint) {
|
||||
var arr []uint
|
||||
var a uint
|
||||
for a = 4; a < maxSmith; a++ {
|
||||
numfactors := numPrimeFactors(a)
|
||||
arr = make([]uint, numfactors)
|
||||
if numfactors < 2 {
|
||||
continue
|
||||
}
|
||||
primeFactors(a, arr)
|
||||
if sumDigits(a) == sumFactors(arr, numfactors) {
|
||||
fmt.Printf("%4d ", a)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func main() {
|
||||
const maxSmith = 10000
|
||||
fmt.Printf("All the Smith Numbers less than %d are:\n", maxSmith)
|
||||
listAllSmithNumbers(maxSmith)
|
||||
fmt.Println()
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue