Module: RMathemata::Integer
- Included in:
- Integer
- Defined in:
- lib/arithmetic.rb
Instance Method Summary collapse
- #euler_totient ⇒ Object
- #gcdn(integers) ⇒ Object
- #is_achilles_number? ⇒ Boolean
- #is_perfect_power? ⇒ Boolean
- #is_powerful? ⇒ Boolean
- #is_strong_achilles_number? ⇒ Boolean
- #numbers_of_strong_achilles_numbers_below ⇒ Object
- #prime_powers ⇒ Object
Instance Method Details
#euler_totient ⇒ Object
58 59 60 61 |
# File 'lib/arithmetic.rb', line 58 def euler_totient return 1 if self == 1 self * ∏x("1 - 1/p", "p", prime_division.map(&:first)) end |
#gcdn(integers) ⇒ Object
30 31 32 33 |
# File 'lib/arithmetic.rb', line 30 def gcdn integers return self unless integers.any? self.gcd integers.shift.gcdn(integers) end |
#is_achilles_number? ⇒ Boolean
54 55 56 |
# File 'lib/arithmetic.rb', line 54 def is_achilles_number? is_powerful? and not is_perfect_power? end |
#is_perfect_power? ⇒ Boolean
44 45 46 47 48 49 50 51 52 |
# File 'lib/arithmetic.rb', line 44 def is_perfect_power? n = 1 loop do n += 1 root = self**(1/n) return true if root.is_a?(Integer) return false if root < 2 end end |
#is_powerful? ⇒ Boolean
39 40 41 42 |
# File 'lib/arithmetic.rb', line 39 def is_powerful? return true if self == 1 prime_powers.min >= 2 end |
#is_strong_achilles_number? ⇒ Boolean
63 64 65 |
# File 'lib/arithmetic.rb', line 63 def is_strong_achilles_number? is_achilles_number? and euler_totient.is_achilles_number? end |
#numbers_of_strong_achilles_numbers_below ⇒ Object
67 68 69 |
# File 'lib/arithmetic.rb', line 67 def numbers_of_strong_achilles_numbers_below 1.upto(self).inject(0) {|total, number| total += 1 if number.is_strong_achilles_number? ; total} end |
#prime_powers ⇒ Object
35 36 37 |
# File 'lib/arithmetic.rb', line 35 def prime_powers prime_division.map(&:pop) end |