Data commit
This commit is contained in:
parent
7387c8f97b
commit
cb5bb5e222
199093 changed files with 3378972 additions and 0 deletions
36
Task/Smith-numbers/Sidef/smith-numbers.sidef
Normal file
36
Task/Smith-numbers/Sidef/smith-numbers.sidef
Normal file
|
|
@ -0,0 +1,36 @@
|
|||
var primes = Enumerator({ |callback|
|
||||
static primes = Hash()
|
||||
var p = 2
|
||||
loop {
|
||||
callback(p)
|
||||
p = (primes{p} := p.next_prime)
|
||||
}
|
||||
})
|
||||
|
||||
func factors(remainder) {
|
||||
|
||||
remainder == 1 && return([remainder])
|
||||
|
||||
gather {
|
||||
primes.each { |factor|
|
||||
if (factor*factor > remainder) {
|
||||
take(remainder) if (remainder > 1)
|
||||
break
|
||||
}
|
||||
|
||||
while (factor.divides(remainder)) {
|
||||
take(factor)
|
||||
break if ((remainder /= factor) == 1)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func is_smith_number(n) {
|
||||
!n.is_prime && (n.digits.sum == factors(n).join.to_i.digits.sum)
|
||||
}
|
||||
|
||||
var s = range(2, 10_000).grep { is_smith_number(_) }
|
||||
say "#{s.len} Smith numbers below 10_000"
|
||||
say "First 10: #{s.first(10)}"
|
||||
say "Last 10: #{s.last(10)}"
|
||||
Loading…
Add table
Add a link
Reference in a new issue