Ниже приведен код Python, который пытается найти сумму всех значений, деленную на определенное число, с использованием найденных уравнений арифметической прогрессии здесь
Программа выдаст неправильный вывод только несколько раз, при этом одни и те же числа будут отключаться на одну и ту же величину каждый раз.
Пример вывода
Формат: сначала это число, которое мы пытаемся найти суммой всех чисел в диапазоне 0-999, которое делится на него. Далее следует грубый ответ, моя попытка и, наконец, разница между двумя ответами
ОШИБКА: 7) correctAnswer = 71071! = TestAnswer = 71000 correctAnswer-testAnswer = 71
ОШИБКА: 11) correctAnswer = 45045! = TestAnswer = 45000 correctAnswer-testAnswer = 45
ОШИБКА: 13) correctAnswer = 38038! = TestAnswer = 38000 correctAnswer-testAnswer = 38
ОШИБКА: 15) correctAnswer = 33165! = TestAnswer = 33132 correctAnswer-testAnswer = 33
ОШИБКА: 17) correctAnswer = 29087! = TestAnswer = 29058 correctAnswer-testAnswer = 29
ОШИБКА: 19) correctAnswer = 26182! = TestAnswer = 26156 correctAnswer-testAnswer = 26
ОШИБКА: 29) correctAnswer = 17255! = TestAnswer = 17238 correctAnswer-testAnswer = 17
ОШИБКА: 31) correctAnswer = 16368! = TestAnswer = 16352 correctAnswer-testAnswer = 16
ОШИБКА: 33) correctAnswer = 15345! = TestAnswer = 15330 correctAnswer-testAnswer = 15
ОШИБКА: 35) correctAnswer = 14210! = TestAnswer = 14196 correctAnswer-testAnswer = 14
ОШИБКА: 41) correctAnswer = 12300! = TestAnswer = 12288 correctAnswer-testAnswer = 12
ОШИБКА: 45) correctAnswer = 11385! = TestAnswer = 11374 correctAnswer-testAnswer = 11
ОШИБКА: 49) correctAnswer = 10290! = TestAnswer = 10280 correctAnswer-testAnswer = 10
ОШИБКА: 53) correctAnswer = 9063! = TestAnswer = 9054 correctAnswer-testAnswer = 9
ОШИБКА: 55) correctAnswer = 9405! = TestAnswer = 9396 correctAnswer-testAnswer = 9
...
Список можно продолжить, но обратите внимание, как разница между двумя ответами уменьшается. Ошибка в конечном итоге падает на 499, другими словами, после 499 программа работает отлично
Код после этого абзаца, он полностью документирован и должен быть готов просто скопировать вставку в IDE и запустить. На данный момент, либо эти проблемы
вызвано герпесом со стороной сумасшедшего (тривиальная ошибка) или некоторым недоразумением о языке. Заранее благодарим за любую помощь
"" "SumDivisibleby возвращает сумму
серия чисел, которые делятся
по значению параметра сначала
Параметры:
first - целое число, которое определяет первое значение
арифметического ряда с постоянной разностью
равно первому значению
last - целое число, которое указывает последнее значение
арифметического ряда с постоянной разностью
равно первому значению
nTerms - целое число, которое указывает количество терминов
в арифметическом ряду, чья постоянная разница
равно первому значению "" "
def SumDivisibleby (первый, последний, nTerms):
вернуть nTerms * ((первый + последний) / 2);
"" "nthTerm находит один термин
в арифметическом ряду которого
постоянная разница равна
первое значение
Параметры:
first - целое число, которое определяет первое значение
арифметического ряда с постоянной разностью
равно первому значению
nTerms - целое число, которое указывает количество терминов
в арифметическом ряду, чья постоянная разница
равно первому значению
cDiff - целое число, представляющее постоянную разницу
арифметической серии, здесь, если она действительно отличается
от первого значения "" "
def nthTerm(first,nTerms,cDiff):
return first + ((nTerms - 1)*cDiff)
"" "defineN находит число терминов, которое будет иметь конкретный арифметический ряд
first - целое число, которое указывает первое значение арифметического ряда, постоянная разность которого равна первымvalue
max - целое число, которое задает максимально возможное значение, допустимое в арифметическом ряду.
cDiff - целое число, которое представляет собой постоянную разницу арифметического ряда, здесь, если оно действительно отличается от первогозначение "" "
def determineN (first, max, cDiff):
return ((max - first)/cDiff)+1
" "" testSumDivisibleBy - это тестовый драйвер для трех вышеуказанных функций "" "
#This value is the chosen upper bound
#for the arithmetic series
chosenMax = 999
def testSumDivisibleBy ():
for i in range(1,2000000):
#Attempting to find the sum of all values divisible by i
numberOfTerms = determineN(i, chosenMax , i)
lastTerm = nthTerm(i, numberOfTerms, i)
testAnswer = SumDivisibleby(i,lastTerm,numberOfTerms)
#This is a brute force solution to the same problem
#that SumDivisibleBy() tries to solve
correctAnswer = 0
for j in range(0,chosenMax +1,i):
correctAnswer+=j
#This prompts the user when a discrepancy has come
#up and displays debug text
if(testAnswer != correctAnswer):
print "ERROR: " + repr(i) + ") correctAnswer = " + \
repr(correctAnswer) + " != testAnswer = " + \
repr(testAnswer) + " correctAnswer-testAnswer = " + \
repr(correctAnswer-testAnswer)
return
#Function call
testSumDivisibleBy()