Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
27 changes: 27 additions & 0 deletions problem03.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
#Project Euler, Problem #3
#What is the largest prime factor of the number 600851475143?

def primeTest testnum
#"For each number between 2 and testnum-1, we will test if number%a = 0 and stop when it does"
(2..(testnum-1)).each {|a| return false if testnum % a==0}
return true
end


num = 600851475143
#sumtest is the sum of the 2 prime factors, once we have both we can stop
lastfactor = 1
curr = 2
sumtest = 1

#while loop to test
#every number must have 2 prime factors
while sumtest < num
if num % curr == 0 && primeTest(curr)
lastfactor = curr
sumtest*=curr
end
curr+=1
end
# lastfactor will always have largest num last so we can just print it
puts "num is #{lastfactor}"
22 changes: 22 additions & 0 deletions problem05.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
#Project Euler, PROBLEM #5
#2520 is the smallest number that can be divided by each of the numbers from 1 to 10 without any remainder.
#What is the smallest positive number that is evenly divisible by all of the numbers from 1 to 20?

def divisorTest testnum
#"We check if the input number is dividable by all numbers encased in 11-20"
(11..20).each { |x| return false if testnum % x != 0 }
return true
end

ceil = 20
found = false

while found == false
#tests if ceil works, if it does the loop will end and the console puts the number that works.
if divisorTest(ceil)
found=true
puts "#{ceil} is divisible by every number between 1 and 20."
end
#increments by 20 and starts with 20 inorder to save time, since checking every number would prove unoptimized
ceil+=20
end
19 changes: 19 additions & 0 deletions problem08.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
#Find the greatest product of five consecutive digits in the 1000-digit number. (used below)
number = "7316717653133062491922511967442657474235534919493496983520312774506326239578318016984801869478851843858615607891129494954595017379583319528532088055111254069874715852386305071569329096329522744304355766896648950445244523161731856403098711121722383113622298934233803081353362766142828064444866452387493035890729629049156044077239071381051585930796086670172427121883998797908792274921901699720888093776657273330010533678812202354218097512545405947522435258490771167055601360483958644670632441572215539753697817977846174064955149290862569321978468622482839722413756570560574902614079729686524145351004748216637048440319989000889524345065854122758866688116427171479924442928230863465674813919123162824586178664583591245665294765456828489128831426076900422421902267105562632111110937054421750694165896040807198403850962455444362981230987879927244284909188845801561660979191338754992005240636899125607176060588611646710940507754100225698315520005593572972571636269561882670428252483600823257530420752963450"
#the number is in string format since a string is just an array of chars so its easy to use arrays

loop = 0;
hiscore = 0;
currscore = 0;

#length-4 to stop invalid memory to mess with things
while loop < number.length-4
#to_i makes the character an integer
currscore = number[loop].to_i*number[loop+1].to_i*number[loop+2].to_i*number[loop+3].to_i*number[loop+4].to_i
if currscore > hiscore
hiscore = currscore
end
loop+=1
end

puts "highscore is #{hiscore}"