How to resolve the algorithm N-smooth numbers step by step in the Wren programming language
Published on 12 May 2024 09:40 PM
How to resolve the algorithm N-smooth numbers step by step in the Wren programming language
Table of Contents
Problem Statement
n-smooth numbers are positive integers which have no prime factors > n. The n in the expression n-smooth is always prime; there are no 9-smooth numbers. 1 (unity) is always included in n-smooth numbers.
2-smooth numbers are non-negative powers of two. 5-smooth numbers are also called Hamming numbers. 7-smooth numbers are also called humble numbers.
A way to express 11-smooth numbers is:
All ranges (for n) are to be inclusive, and only prime numbers are to be used. The (optional) n-smooth numbers for the third range are: 503, 509, and 521. Show all n-smooth numbers for any particular n in a horizontal list. Show all output here on this page.
Let's start with the solution:
Step by Step solution about How to resolve the algorithm N-smooth numbers step by step in the Wren programming language
Source code in the wren programming language
import "/math" for Int
import "/big" for BigInt, BigInts
// cache all primes up to 521
var smallPrimes = Int.primeSieve(521)
var primes = smallPrimes.map { |p| BigInt.new(p) }.toList
var nSmooth = Fn.new { |n, size|
if (n < 2 || n > 521) Fiber.abort("n must be between 2 and 521")
if (size < 1) Fiber.abort("size must be at least 1")
var bn = BigInt.new(n)
var ok = false
for (prime in primes) {
if (bn == prime) {
ok = true
break
}
}
if (!ok) Fiber.abort("n must be a prime number")
var ns = List.filled(size, null)
ns[0] = BigInt.one
var next = []
for (i in 0...primes.count) {
if (primes[i] > bn) break
next.add(primes[i])
}
var indices = List.filled(next.count, 0)
for (m in 1...size) {
ns[m] = BigInts.min(next)
for (i in 0...indices.count) {
if (ns[m] == next[i]) {
indices[i] = indices[i] + 1
next[i] = primes[i] * ns[indices[i]]
}
}
}
return ns
}
smallPrimes = smallPrimes.where { |p| p <= 29 }
for (i in smallPrimes) {
System.print("The first 25 %(i)-smooth numbers are:")
System.print(nSmooth.call(i, 25))
System.print()
}
for (i in smallPrimes.skip(1)) {
System.print("The 3,000th to 3,202nd %(i)-smooth numbers are:")
System.print(nSmooth.call(i, 3002)[2999..-1])
System.print()
}
for (i in [503, 509, 521]) {
System.print("The 30,000th to 30,019th %(i)-smooth numbers are:")
System.print(nSmooth.call(i, 30019)[29999..-1])
System.print()
}
You may also check:How to resolve the algorithm Hello world/Graphical step by step in the Frege programming language
You may also check:How to resolve the algorithm Sieve of Eratosthenes step by step in the VBA programming language
You may also check:How to resolve the algorithm String comparison step by step in the zkl programming language
You may also check:How to resolve the algorithm Repeat a string step by step in the Nanoquery programming language
You may also check:How to resolve the algorithm Averages/Mode step by step in the Slate programming language