NAME
Sidef::Types::Range::RangeNumber
DESCRIPTION
This class represents numerical ranges in Sidef, providing functionality for iterating over sequences of numbers with a specified start, end, and step value. It supports operations on ranges including arithmetic progressions, number-theoretic functions (like finding primes, semiprimes, squarefree numbers), and various aggregation methods (sum, product, average).
SYNOPSIS
var r = RangeNumber(1, 10) # range from 1 to 10, step 1
var r = RangeNumber(1, 10, 2) # range from 1 to 10, step 2
var r = 1..10 # same as RangeNumber(1, 10)
var r = ^10 # range from 0 to 9
INHERITS
Inherits methods from:
* Sidef::Types::Range::Range
* Sidef::Object::Object
METHODS
Π
self. Π
self.Π(block)
Returns the product of all elements in the range. When a block is provided, returns the product of the block applied to each element.
say (1..5).Π #=> 120 (1*2*3*4*5)
say (1..5).Π {|n| n**2 } #=> 14400 (1*4*9*16*25)
Aliases: prod
Σ
self. Σ
self.Σ(block)
Returns the sum of all elements in the range. When a block is provided, returns the sum of the block applied to each element.
say (1..10).Σ #=> 55
say (1.. 10).Σ {|n| n**2 } #=> 385
Aliases: sum
almost_prime_count
self.almost_prime_count(k)
Returns the count of k-almost prime numbers in the range. A k-almost prime is a number with exactly k prime factors (counted with multiplicity).
say (1.. 100).almost_prime_count(2) # count of semiprimes in range
almost_primes
self. almost_primes(k)
Returns an array of k-almost prime numbers in the range. A k-almost prime is a number with exactly k prime factors (counted with multiplicity).
say (1.. 100).almost_primes(2) # semiprimes: [4, 6, 9, 10, 14, ...]
say (1.. 100).almost_primes(3) # 3-almost primes: [8, 12, 18, 20, ...]
almost_prime_sum
self.almost_prime_sum(k)
Returns the sum of all k-almost prime numbers in the range.
say (1..100).almost_prime_sum(2) # sum of semiprimes in range
avg
self.avg
self.avg(block)
Returns the arithmetic mean of all elements in the range. When a block is provided, returns the average of the block applied to each element.
say (1..10).avg #=> 5.5
say (1..10).avg {|n| n**2 } #=> 38.5
avg_by
self.avg_by(block)
Returns the arithmetic mean of the block applied to each element in the range.
say (1..10).avg_by {|n| n**2 } #=> 38.5
bsearch
self. bsearch(block)
Performs a binary search on the range using the given block. Returns the element for which the block returns 0 (equal), or nil if not found.
# Find x where x**2 == 49
say (1..100).bsearch {|n| 49 <=> n**2 } #=> 7
bsearch_ge
self.bsearch_ge(block)
Performs a binary search and returns the first element for which the block returns >= 0.
say (1..100).bsearch_ge {|n| n**2 - 50 } # first n where n**2 >= 50
bsearch_le
self. bsearch_le(block)
Performs a binary search and returns the last element for which the block returns <= 0.
say (1..100).bsearch_le {|n| n**2 - 50 } # last n where n**2 <= 50
carmichael
self.carmichael(k)
Returns the Carmichael numbers in the range that are also k-almost primes. Carmichael numbers are composite numbers n that satisfy a^(n-1) ≡ 1 (mod n) for all integers a coprime to n.
say (1..10000).carmichael(3) # 3-factor Carmichael numbers
composite_count
self. composite_count
Returns the count of composite numbers in the range.
say (1..100).composite_count #=> 74
composites
self. composites
Returns an array of composite numbers in the range.
say (1..20).composites #=> [4, 6, 8, 9, 10, 12, 14, 15, 16, 18, 20]
composite_sum
self.composite_sum
Returns the sum of all composite numbers in the range.
say (1..100).composite_sum
cubefree
self.cubefree
Returns an array of cubefree numbers in the range. A cubefree number has no perfect cube (other than 1) as a divisor.
say (1..20).cubefree #=> [1, 2, 3, 4, 5, 6, 7, 9, 10, 11, 12, 13, 14, 15, 17, 18, 19, 20]
cubefree_count
self.cubefree_count
Returns the count of cubefree numbers in the range.
say (1..1000).cubefree_count
cubefree_sum
self.cubefree_sum
Returns the sum of all cubefree numbers in the range.
say (1..100).cubefree_sum
cubefull
self.cubefull
Returns an array of cubefull (3-powerful) numbers in the range. A cubefull number has all prime factors appearing at least 3 times.
say (1.. 1000).cubefull #=> [1, 8, 16, 27, 32, 64, 81, ...]
cubefull_count
self.cubefull_count
Returns the count of cubefull numbers in the range.
say (1..10000).cubefull_count
cubefull_sum
self.cubefull_sum
Returns the sum of all cubefull numbers in the range.
say (1..1000).cubefull_sum
each_almost_prime
self.each_almost_prime(k, block)
Iterates over all k-almost prime numbers in the range, executing the block for each.
(1..100).each_almost_prime(2, {|n| say n }) # print semiprimes
each_carmichael
self.each_carmichael(k, block)
Iterates over all Carmichael numbers in the range that are also k-almost primes.
(1.. 100000).each_carmichael(3, {|n| say n })
each_composite
self.each_composite(block)
Iterates over all composite numbers in the range, executing the block for each.
(1..20).each_composite {|n| say n }
each_cubefree
self.each_cubefree(block)
Iterates over all cubefree numbers in the range, executing the block for each.
(1..100).each_cubefree {|n| say n }
each_cubefull
self.each_cubefull(block)
Iterates over all cubefull numbers in the range, executing the block for each.
(1..1000).each_cubefull {|n| say n }
each_lucas_carmichael
self.each_lucas_carmichael(k, block)
Iterates over all Lucas-Carmichael numbers in the range that are also k-almost primes. Lucas-Carmichael numbers are similar to Carmichael numbers but defined using the relation (p+1) | (n+1) for all prime factors p.
(1.. 100000).each_lucas_carmichael(3, {|n| say n })
each_noncubefree
self. each_noncubefree(block)
Iterates over all non-cubefree numbers in the range (numbers divisible by a perfect cube > 1).
(1.. 100).each_noncubefree {|n| say n } # 8, 16, 24, 27, ...
each_nonpowerfree
self.each_nonpowerfree(k, block)
Iterates over all non-k-powerfree numbers in the range (numbers divisible by a k-th power > 1).
(1.. 100).each_nonpowerfree(2, {|n| say n }) # non-squarefree numbers
each_nonsquarefree
self.each_nonsquarefree(block)
Iterates over all non-squarefree numbers in the range (numbers divisible by a perfect square > 1).
(1..100).each_nonsquarefree {|n| say n } # 4, 8, 9, 12, 16, ...
each_omega_prime
self.each_omega_prime(k, block)
Iterates over all k-omega prime numbers in the range. A k-omega prime has exactly k distinct prime factors.
(1.. 100).each_omega_prime(2, {|n| say n }) # numbers with exactly 2 distinct prime factors
each_powerfree
self.each_powerfree(k, block)
Iterates over all k-powerfree numbers in the range (numbers not divisible by any k-th power > 1).
(1..100).each_powerfree(2, {|n| say n }) # squarefree numbers
each_powerful
self.each_powerful(k, block)
Iterates over all k-powerful numbers in the range. A k-powerful number has all prime factors appearing at least k times.
(1..1000).each_powerful(2, {|n| say n }) # squarefull numbers
each_prime
self.each_prime(block)
Iterates over all prime numbers in the range, executing the block for each.
(1..100).each_prime {|p| say p } # print primes up to 100
each_prime_power
self.each_prime_power(block)
Iterates over all prime powers in the range. A prime power is p^k where p is prime and k >= 1.
(1..100).each_prime_power {|n| say n } # 2, 3, 4, 5, 7, 8, 9, 11, ...
each_semiprime
self.each_semiprime(block)
Iterates over all semiprimes (2-almost primes) in the range. A semiprime is a product of exactly two primes.
(1..100).each_semiprime {|n| say n } # 4, 6, 9, 10, 14, 15, ...
each_squarefree
self.each_squarefree(block)
Iterates over all squarefree numbers in the range, executing the block for each.
(1..100).each_squarefree {|n| say n }
each_squarefree_almost_prime
self.each_squarefree_almost_prime(k, block)
Iterates over all squarefree k-almost prime numbers in the range.
(1.. 100).each_squarefree_almost_prime(3, {|n| say n }) # products of 3 distinct primes
each_squarefree_semiprime
self.each_squarefree_semiprime(block)
Iterates over all squarefree semiprimes in the range (products of two distinct primes).
(1..100).each_squarefree_semiprime {|n| say n } # 6, 10, 14, 15, ...
each_squarefull
self.each_squarefull(block)
Iterates over all squarefull (2-powerful) numbers in the range. A squarefull number has all prime factors appearing at least twice.
(1..100).each_squarefull {|n| say n } # 1, 4, 8, 9, 16, 25, 27, ...
faulhaber
self.faulhaber(k)
Returns the sum of the k-th powers of all integers in the range using Faulhaber's summation formula.
say (1..10).faulhaber(2) #=> 385 (sum of squares: 1+4+9+... +100)
say (1.. 10).faulhaber(3) #=> 3025 (sum of cubes: 1+8+27+... +1000)
Aliases: faulhaber_sum
gcd
self. gcd
self.gcd(block)
Returns the greatest common divisor of all elements in the range. When a block is provided, returns the GCD of the block applied to each element.
say (6..12).gcd # GCD of 6,7,8,9,10,11,12
say (1..10).gcd {|n| n * 6 } # GCD of 6,12,18,... ,60
gcd_by
self.gcd_by(block)
Returns the greatest common divisor of the block applied to each element in the range.
say (1..10).gcd_by {|n| 2*n }
iter
self.iter
Returns an iterator (Block) that generates successive elements of the range.
var it = (1..5).iter
say it.run #=> 1
say it.run #=> 2
say it.run #=> 3
lcm
self. lcm
self.lcm(block)
Returns the least common multiple of all elements in the range. For the range 1..n with step 1, this uses an optimized consecutive LCM formula.
say (1..10).lcm #=> 2520
say (1.. 10).lcm {|n| 2*n }
lcm_by
self. lcm_by(block)
Returns the least common multiple of the block applied to each element in the range.
say (1.. 10).lcm_by {|n| n + 1 }
lucas_carmichael
self.lucas_carmichael(k)
Returns the Lucas-Carmichael numbers in the range that are also k-almost primes.
say (1..100000).lucas_carmichael(3)
mertens
self.mertens
Returns the Mertens function M(n) = Σμ(k) for k in the range, where μ is the Möbius function.
say (1..100).mertens
new
RangeNumber. new(from, to, step)
Creates a new RangeNumber object with the specified start, end, and optional step value.
var r = RangeNumber.new(1, 10) # 1 to 10, step 1
var r = RangeNumber.new(1, 10, 2) # 1, 3, 5, 7, 9
var r = RangeNumber.new(10) # 0 to 9
Aliases: call
noncubefree
self.noncubefree
Returns an array of non-cubefree numbers in the range (numbers divisible by a perfect cube > 1).
say (1..100).noncubefree #=> [8, 16, 24, 27, 32, ...]
noncubefree_count
self. noncubefree_count
Returns the count of non-cubefree numbers in the range.
say (1..1000).noncubefree_count
noncubefree_sum
self. noncubefree_sum
Returns the sum of all non-cubefree numbers in the range.
say (1..100).noncubefree_sum
nonpowerfree
self. nonpowerfree(k)
Returns an array of non-k-powerfree numbers in the range.
say (1..100).nonpowerfree(2) # non-squarefree numbers
nonpowerfree_count
self.nonpowerfree_count(k)
Returns the count of non-k-powerfree numbers in the range.
say (1.. 1000).nonpowerfree_count(2)
nonpowerfree_sum
self.nonpowerfree_sum(k)
Returns the sum of all non-k-powerfree numbers in the range.
say (1.. 100).nonpowerfree_sum(2)
nonsquarefree
self.nonsquarefree
Returns an array of non-squarefree numbers in the range (numbers divisible by a perfect square > 1).
say (1..50).nonsquarefree #=> [4, 8, 9, 12, 16, 18, 20, 24, 25, ...]
nonsquarefree_count
self. nonsquarefree_count
Returns the count of non-squarefree numbers in the range.
say (1..1000).nonsquarefree_count
nonsquarefree_sum
self.nonsquarefree_sum
Returns the sum of all non-squarefree numbers in the range.
say (1..100).nonsquarefree_sum
omega_prime_count
self. omega_prime_count(k)
Returns the count of k-omega prime numbers in the range (numbers with exactly k distinct prime factors).
say (1..1000).omega_prime_count(2) # numbers with exactly 2 distinct prime factors
omega_primes
self. omega_primes(k)
Returns an array of k-omega prime numbers in the range.
say (1..100).omega_primes(2) # numbers with exactly 2 distinct prime factors
omega_prime_sum
self.omega_prime_sum(k)
Returns the sum of all k-omega prime numbers in the range.
say (1.. 1000).omega_prime_sum(2)
powerfree
self.powerfree(k)
Returns an array of k-powerfree numbers in the range (numbers not divisible by any k-th power > 1).
say (1..50).powerfree(2) # squarefree numbers
say (1.. 50).powerfree(3) # cubefree numbers
powerfree_count
self. powerfree_count(k)
Returns the count of k-powerfree numbers in the range.
say (1..1000).powerfree_count(2) # count of squarefree numbers
powerfree_sum
self.powerfree_sum(k)
Returns the sum of all k-powerfree numbers in the range.
say (1..100).powerfree_sum(2)
powerful
self.powerful(k)
Returns an array of k-powerful numbers in the range. A k-powerful number has all prime factors appearing at least k times.
say (1..100).powerful(2) # squarefull: [1, 4, 8, 9, 16, 25, 27, ...]
powerful_count
self.powerful_count(k)
Returns the count of k-powerful numbers in the range.
say (1..10000).powerful_count(2)
powerful_sum
self.powerful_sum(k)
Returns the sum of all k-powerful numbers in the range.
say (1..1000).powerful_sum(2)
prime_count
self. prime_count
Returns the count of prime numbers in the range.
say (1..100).prime_count #=> 25
prime_power_count
self.prime_power_count
Returns the count of prime powers in the range (numbers of the form p^k where p is prime and k >= 1).
say (1..100).prime_power_count
prime_powers
self.prime_powers
Returns an array of prime powers in the range.
say (1..50).prime_powers #=> [2, 3, 4, 5, 7, 8, 9, 11, 13, 16, 17, 19, 23, 25, 27, 29, 31, 32, 37, 41, 43, 47, 49]
prime_power_sum
self.prime_power_sum
Returns the sum of all prime powers in the range.
say (1..100).prime_power_sum
primes
self.primes
Returns an array of prime numbers in the range.
say (1..50).primes #=> [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47]
prime_sum
self.prime_sum
Returns the sum of all prime numbers in the range.
say (1..100).prime_sum #=> 1060
prod_by
self. prod_by(block)
Returns the product of the block applied to each element in the range.
say (1.. 5).prod_by {|n| n + 1 } #=> 720 (2*3*4*5*6)
rough_count
self.rough_count(k)
Returns the count of k-rough numbers in the range. A k-rough number has all prime factors >= k.
say (1..1000).rough_count(5) # numbers with all prime factors >= 5
semiprime_count
self.semiprime_count
Returns the count of semiprimes (products of exactly two primes) in the range.
say (1..100).semiprime_count
semiprimes
self.semiprimes
Returns an array of semiprimes in the range.
say (1..50).semiprimes #=> [4, 6, 9, 10, 14, 15, 21, 22, 25, 26, 33, 34, 35, 38, 39, 46, 49]
semiprime_sum
self.semiprime_sum
Returns the sum of all semiprimes in the range.
say (1..100).semiprime_sum
smooth_count
self.smooth_count(k)
Returns the count of k-smooth numbers in the range. A k-smooth number has all prime factors <= k.
say (1..1000).smooth_count(5) # 5-smooth numbers (regular numbers)
squarefree
self.squarefree
Returns an array of squarefree numbers in the range. A squarefree number has no perfect square (other than 1) as a divisor.
say (1..20).squarefree #=> [1, 2, 3, 5, 6, 7, 10, 11, 13, 14, 15, 17, 19]
squarefree_almost_prime_count
self.squarefree_almost_prime_count(k)
Returns the count of squarefree k-almost prime numbers in the range (products of exactly k distinct primes).
say (1.. 1000).squarefree_almost_prime_count(3)
squarefree_almost_primes
self. squarefree_almost_primes(k)
Returns an array of squarefree k-almost prime numbers in the range.
say (1..100).squarefree_almost_primes(3) # products of 3 distinct primes: [30, 42, 66, 70, 78]
squarefree_almost_prime_sum
self.squarefree_almost_prime_sum(k)
Returns the sum of all squarefree k-almost prime numbers in the range.
say (1.. 1000).squarefree_almost_prime_sum(3)
squarefree_count
self.squarefree_count
Returns the count of squarefree numbers in the range.
say (1.. 100).squarefree_count #=> 61
squarefree_semiprime_count
self.squarefree_semiprime_count
Returns the count of squarefree semiprimes in the range (products of two distinct primes).
say (1.. 100).squarefree_semiprime_count
squarefree_semiprimes
self.squarefree_semiprimes
Returns an array of squarefree semiprimes in the range.
say (1..50).squarefree_semiprimes #=> [6, 10, 14, 15, 21, 22, 26, 33, 34, 35, 38, 39, 46]
squarefree_semiprime_sum
self.squarefree_semiprime_sum
Returns the sum of all squarefree semiprimes in the range.
say (1..100).squarefree_semiprime_sum
squarefree_sum
self.squarefree_sum
Returns the sum of all squarefree numbers in the range.
say (1..100).squarefree_sum
squarefull
self.squarefull
Returns an array of squarefull (2-powerful) numbers in the range. A squarefull number has all prime factors appearing at least twice.
say (1..100).squarefull #=> [1, 4, 8, 9, 16, 25, 27, 32, 36, 49, 64, 72, 81, 100]
squarefull_count
self.squarefull_count
Returns the count of squarefull numbers in the range.
say (1..10000).squarefull_count
squarefull_sum
self.squarefull_sum
Returns the sum of all squarefull numbers in the range.
say (1..1000).squarefull_sum
sum_by
self. sum_by(block)
Returns the sum of the block applied to each element in the range.
say (1..10).sum_by {|n| n**2 } #=> 385
to_s
self.to_s
Returns a string representation of the range.
say (1..10).to_s #=> "RangeNum(1, 10, 1)"
Aliases: dump, to_str