Я пытался решить проблему номер 12 проекта Euler. Это проблема:
Последовательность чисел треугольника генерируется путем сложения натуральных чисел. Таким образом, 7-е число треугольника будет 1 + 2 + 3 + 4 + 5 + 6 + 7 = 28. Первые десять членов будут такими:
1, 3, 6, 10, 15, 21, 28, 36, 45, 55, ...
Перечислим множители первых семи треугольных чисел:
- 1: 1
- 3: 1,3
- 6: 1,2,3,6
- 10: 1,2,5,10
- 15: 1,3,5,15
- 21: 1,3,7,21
- 28: 1,2,4,7,14,28
Мы видим, что 28 — первое треугольное число, имеющее более пяти делителей.
Каково значение первого треугольного числа, имеющего более пятисот делителей?
Я определил две функции для выполнения этой работы:
1) allfactor(x)
: Это дает нам все факторы данного числа в форме списка. Пример: allfactor(10)
дает нам [1, 2, 5, 10]
2)TriangularNo(x)
: это дает нам n-е треугольное число. Пример TriangularNo(5)
дает нам 5
Вот полный код, который я написал:
facs=[]
def allfacof(x):
for i in range(1,int(x/2)+1):
if x%i==0:
facs.append(i)
else:
pass
facs.append(x)
return(facs)
def TriangularNo(x):
no=0
for i in range(1,x+1):
no=no+i
return(no)
a=0 # a will tell us the number of iterations
while True:
a+=1
N=TriangularNo(a)
length=(len(allfacof(N)))
if int(length)>=500:
print(N)
break
else:
pass
Когда я запускаю этот код, я получаю 1378
в качестве вывода, что явно неверно, потому что len(allfacof(1378))
оказывается 8
, а не 500
, как требовалось в вопросе.
Обратите внимание, что в цикле while
я использую if int(length)>=500:
. Это означает, что когда мой код запускается, length
каким-то образом получает значение = 500, но когда я запускаю функцию отдельно, она говорит, что ее длина равна 8.
Я просто не могу найти ошибку. Помогите пожалуйста мне