Skip to content

Instantly share code, notes, and snippets.

@Archer70
Created September 26, 2015 19:20
Show Gist options
  • Save Archer70/0a4b71840e2cf5f44a97 to your computer and use it in GitHub Desktop.
Save Archer70/0a4b71840e2cf5f44a97 to your computer and use it in GitHub Desktop.
PrimeFactors
class PrimeFactors
def self.of number
PrimeFactors.new(number).calculate
end
def initialize number
@number = number
@divisor = 2
@primes = []
end
def calculate
return [@number] if @number <= 3
while @number > 1
add_prime
end
@primes
end
private
def add_prime
while @divisor <= @number do
if evenly_divisible?
divide_number
push_prime_to_result
else
increment_divisor
end
end
end
def evenly_divisible?
@number % @divisor == 0
end
def divide_number
@number = @number / @divisor
end
def push_prime_to_result
@primes << @divisor
end
def increment_divisor
@divisor += 1
end
end
require_relative '../src/prime_factors'
RSpec.describe PrimeFactors do
describe 'PrimeFactors::of()' do
it 'returns 1, given 1' do
expect(PrimeFactors::of(1)).to eq([1])
end
it 'returns [2], given 2' do
expect(PrimeFactors::of(2)).to eq([2])
end
it 'returns [3], given 3' do
expect(PrimeFactors::of(3)).to eq([3])
end
it 'returns [2, 2], given 4' do
expect(PrimeFactors::of(4)).to eq([2, 2])
end
it 'returns [5], given 5' do
expect(PrimeFactors::of(5)).to eq([5])
end
it 'retrurn [2, 3], given 6' do
expect(PrimeFactors::of(6)).to eq([2, 3])
end
it 'returns [7], given 7' do
expect(PrimeFactors::of(7)).to eq([7])
end
it 'returns [2, 2, 2], given 8' do
expect(PrimeFactors::of(8)).to eq([2, 2, 2])
end
it 'returns [3, 3], given 9' do
expect(PrimeFactors::of(9)).to eq([3, 3])
end
it 'returns [2, 3, 5, 7], given 2 x 3 x 5 x 7' do
expect(PrimeFactors::of(2*3*5*7)).to eq([2, 3, 5, 7])
end
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment