Написал программу, она вычисляет, но только первых 7, а дальше все- зависает
как бы исправить, чтобы первые 100 найти?
код:
sp = {}
for i in range(0,100000000000000+1):
n = 0
for j in range(2,i//2 +1):
if i%j == 0:
n+=1
if n >3:
break
sp[n]=i
if n==3:
print(sp[1])
Ровно 5 делителей (включая 1 и само число) имеет только простое число, возведённое в четвёртую степень. def is_prime: ~~if n % 2 == 0 or n < 2: return n == 2 ~~i = 3 ~~while i * i <= n: ~~~~if n % i == 0: return False ~~~~i += 2 ~~return True i, c = 1, 0 while c < 100: ~~if is_prime(i): ~~~~print(i ** 4) ~~~~c += 1 ~~i += 1
1) вместо того, чтобы делать какие-то микрооптимизации типа преждевременного выхода из цикла, считающего делители, попробуй просто сделать нормальную функцию, считающую количество делителей произвольного числа, но чтобы она работала за O(sqrt), а не за O, как у тебя 2) последнее из этих ста чисел будет порядка 10^10, на питоне оно будет искаться до второго пришествия эта задача решается куда эффективнее, если знать, как вообще должны выглядеть такие числа, а точнее - их разложения на простые множители подумай, как получить количество делителей числа, зная его разложение (вида p1^k1*...*pn^kn, где p1..pn - простые числа)