Module: RMathemata::Integer

Included in:
Integer
Defined in:
lib/arithmetic.rb

Instance Method Summary collapse

Instance Method Details

#euler_totientObject



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

Returns:

  • (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

Returns:

  • (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

Returns:

  • (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

Returns:

  • (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_belowObject



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_powersObject



35
36
37
# File 'lib/arithmetic.rb', line 35

def prime_powers
  prime_division.map(&:pop)
end