@kudlenkov303

Как перевести код с Pascal на Python?

Задача: Назовём нетривиальным делителем натурального числа его делитель, не равный единице и самому числу. Например, у числа 6 есть два нетривиальных делителя: 2 и 3. Найдите все натуральные числа, принадлежащие отрезку [289123456; 389123456] и имеющие ровно три нетривиальных делителя. Для каждого найденного числа запишите в ответе его наибольший нетривиальный делитель. Ответы расположите в порядке возрастания.

Например, в диапазоне [5; 16] ровно три различных натуральных делителя имеет число 16, поэтому для этого диапазона вывод на экране должна содержать следующие значения:

16 8

Вот решение на паскале, но как перевести данный код на питон. Я раньше на паскале программировал, но уже забыл его так как я уже перешел на новый язык программирования.
var 
    numDel, i, j: longint;
    maxDel: longint;
    sqrtI: real;
begin
    for i := 289123456 to 389123456 do begin
        sqrtI := sqrt(i);
        numDel := 0;
        if (round(sqrtI) = sqrtI) then begin
            maxDel := 1;
            for j := 1 to round(sqrtI) do
                if (i mod j = 0) then begin
                    if (maxDel = 1) and (j <> 1) then maxDel := i div j;
                    if (j <> round(sqrtI)) then numDel := numDel + 2;
                    if (j * j = i) then numDel := numDel + 1;
                end;
            if numDel = 5 then writeln(i, ' ', maxDel);
        end;
    end;
end.

Вот попытка решить задачу, но у меня программа не работает. Выдает ошибку SyntaxError: invalid syntax
from math import sqrt

for i in range(289123456, 389123456+1):
    sqrtIT = sqrt(i)
    numDel = 0
    if (round(sqrtIT)) == sqrtIT:
        maxDel = 1
        for j == 1:
            round(sqrtIT)
            if (i % j == 0):
                if maxDel == 1 and j <> 1:
                    maxDel = i / j
                if (j <> round(sqrtIT)):
                    numDel += 2
                if j * j == i:
                    numDel += 1
        if numDel == 5:
            print(i, ' ', maxDel)
  • Вопрос задан
  • 10570 просмотров
Пригласить эксперта
Ответы на вопрос 1
AlexNest
@AlexNest Куратор тега Python
Работаю с Python/Django
Как перевести код с Pascal на Python?

Используя синтаксис и встроенные функции (смотреть в офф.доках / "шпаргалке") написать соответствующий код.

---
Допускаю, что найдется кто-то, готовый за вас делать ваши задания, и напишет код, но в текущем виде, поскольку вы не привели попыток решения, вопрос фактически является заданием. А про задания четко написано в п.5.12 правил.
upd:
Самые очевидные ошибки
from math import sqrt

for i in range(289123456, 389123456+1):
    sqrtIT = sqrt(i)
    numDel = 0
    if (round(sqrtIT)) == sqrtIT:
        maxDel = 1
        for j in range(1, round(sqrtIT)): # Раз ошибка
            """
                Собственно, первый цикл 'for i := 289123456 to 389123456 do begin' вы переделали правильно, почему второй так сделали - непонятно
            """
            round(sqrtIT)
            if (i % j == 0):
                if maxDel == 1 and j != 1: # вторая ошибка. В питоне - не равно пишется так: !=
                    maxDel = i // j # Еще одна ошибка (из коментов)
                if (j != round(sqrtIT)): # третья ошибка
                    numDel += 2
                if j * j == i:
                    numDel += 1
        if numDel == 5:
            print(i, ' ', maxDel)
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы