mirror of
https://bitbucket.org/Mattrixwv/projecteulerpython.git
synced 2026-02-03 19:52:28 -05:00
Updated problem 1 algorithm
This commit is contained in:
@@ -1,7 +1,7 @@
|
|||||||
#ProjectEuler/Python/Problem1.py
|
#ProjectEuler/Python/Problem1.py
|
||||||
#Matthew Ellison
|
#Matthew Ellison
|
||||||
# Created: 01-26-19
|
# Created: 01-26-19
|
||||||
#Modified: 07-17-20
|
#Modified: 10-26-20
|
||||||
#What is the sum of all the multiples of 3 or 5 that are less than 1000
|
#What is the sum of all the multiples of 3 or 5 that are less than 1000
|
||||||
#Unless otherwise listed, all of my non-standard imports can be gotten from my pyClasses repository at https://bitbucket.org/Mattrixwv/pyClasses
|
#Unless otherwise listed, all of my non-standard imports can be gotten from my pyClasses repository at https://bitbucket.org/Mattrixwv/pyClasses
|
||||||
"""
|
"""
|
||||||
@@ -23,8 +23,8 @@
|
|||||||
|
|
||||||
|
|
||||||
from Problems.Problem import Problem
|
from Problems.Problem import Problem
|
||||||
from Stopwatch import Stopwatch
|
|
||||||
from Unsolved import Unsolved
|
from Unsolved import Unsolved
|
||||||
|
import math
|
||||||
|
|
||||||
|
|
||||||
class Problem1(Problem):
|
class Problem1(Problem):
|
||||||
@@ -47,13 +47,8 @@ class Problem1(Problem):
|
|||||||
#Start the timer
|
#Start the timer
|
||||||
self.timer.start()
|
self.timer.start()
|
||||||
|
|
||||||
#Check every number < 1000 to see if it is a multiple of 3 or 5. If it is add it to the running sum
|
#Get the sum of the progressions of 3 and 5 and remove the sum of progressions of the overlap
|
||||||
#Add one to topNum because range works on < instead of <=
|
self.fullSum = self.sumOfProgression(3) + self.sumOfProgression(5) - self.sumOfProgression(3 * 5)
|
||||||
for num in range(1, self.__topNum + 1):
|
|
||||||
if((num % 3) == 0):
|
|
||||||
self.fullSum += num
|
|
||||||
elif((num % 5) == 0):
|
|
||||||
self.fullSum += num
|
|
||||||
|
|
||||||
#Stop the timer
|
#Stop the timer
|
||||||
self.timer.stop()
|
self.timer.stop()
|
||||||
@@ -75,6 +70,11 @@ class Problem1(Problem):
|
|||||||
if(not self.solved):
|
if(not self.solved):
|
||||||
raise Unsolved("You must solve the problem before can you see the sum")
|
raise Unsolved("You must solve the problem before can you see the sum")
|
||||||
return self.fullSum
|
return self.fullSum
|
||||||
|
#Gets the sum of the progression of the multiple
|
||||||
|
def sumOfProgression(self, multiple: int) -> int:
|
||||||
|
numTerms = math.floor(self.__topNum / multiple) #Get the sum of the progressions of 3 and 5 and remove the sum of progressions of the overlap
|
||||||
|
#The sum of progression formula is (n / 2)(a + l). n = number of terms, a = multiple, l = last term
|
||||||
|
return int((numTerms / 2) * (multiple + (numTerms * multiple)))
|
||||||
|
|
||||||
|
|
||||||
#If you are running this file, automatically start the correct function
|
#If you are running this file, automatically start the correct function
|
||||||
@@ -88,5 +88,5 @@ if(__name__ == "__main__"):
|
|||||||
|
|
||||||
"""Results:
|
"""Results:
|
||||||
The sum of all numbers < 1000 is 233168
|
The sum of all numbers < 1000 is 233168
|
||||||
It took an average of 102.336 microseconds to run this problem through 100 iterations
|
It took an average of 2.293 microseconds to run this problem through 100 iterations
|
||||||
"""
|
"""
|
||||||
|
|||||||
Reference in New Issue
Block a user