Форум » Обработка целых чисел » 25 » Ответить

25

Pavlova21: k=0 for n in range(50000000,60000000 + 1): kd=0 d = 2 while d*d<n: if n % d == 0 and n%911==0: kd+=1 if d != n//d: kd+=1 if kd > 6: break d+=1 if kd == 6: k+=1 print(n, k)

Ответов - 3

Pavlova21: Найти числа имеющие ровно 6 делителей (не считая 1 и самого числа), среди которых есть 911. Найти количество и минимальное из них

Pavlova21: Подскажите, пожалуйста, как ускорить программу? считает, но очень долго

oval: ну, первая идея: найти первое число кратное 911 и перебирать числа с шагом не 1, а 911. Не думаю, что сильно ускорит. вторая идея: рассматривать числа из интервала 50_000_000//911+1 до 60_000_000//911 и эти числа должны быть кубом простого числа тогда число из интервала 50_000_000 до 60_000_000 имеют вид 911*p^3 и его делители: 911, p, 911*p, p^2, 911*p^2, p^3 как раз 6 штук, не включая 1 и само число а дальше берем кубический корень из 50_000_000//911+1 и 60_000_000//911 и в этом интервале ищем простые числа еще вариант чисел вида 911*p*q дает 6 делителей(p и q простые) p.s.рассматривать вариант 911^3*p не стоит, выходим за границы интервала




полная версия страницы