g1shy
@g1shy
Young python learner

Как решается эта задача из ЕГЭ по информатике?

Суть задачи: нужно написать программу которая ищет среди целых чисел, принадлежащих числовому отрезку [174457; 174505], числа, имеющие ровно два различных натуральных делителя, не считая единицы и самого числа. Для каждого найденного числа записать эти два делителя в два соседних столбца на экране с новой строки в порядке возрастания произведения этих двух делителей. Делители в строке также должны следовать в порядке возрастания.

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

2 3

2 4

То, как я пытался решить эту задачку:
a = 174457
b = 174505
k = 0
d = []
for n in range(a, b+1):
    if n%2 == 0:
        k+=1
        d.append(n)
        if k > 2:
            break
    if k == 2:
        print(d[0], d[1])

У меня просто не хватает мозгов, чтобы понять, как найти эти натуральные делители

В ответах к этой задачке был представлен код на паскале:
var 
    x, numDel, i, j: longint;
    d: array[1..2] of longint;
begin
    for i := 174457 to 174505 do begin
        numDel := 0;
        for j := 2 to i div 2 do begin
            if i mod j = 0 then begin
                numDel := numDel + 1;
                if numDel > 2 then break;
                d[numDel] := j;
            end;
        end;
        if numDel = 2 then writeln(d[1], ' ', d[2]);
    end;
end.

Но, когда я пытался сделать что-то похожее на пайтоне, выходил ещё более неправильный результат.
Вот, что выдаёт моя прога:

174458 174460
174458 174460

А должна вот это:

3 58153
7 24923
59 2957
13 13421
149 1171
5 34897
211 827
2 87251

Помогите, плиз
  • Вопрос задан
  • 23664 просмотра
Решения вопроса 1
15432
@15432
Системный программист ^_^
Так чтоли?
a = 174457
b = 174505
k = 0
for n in range(a, b + 1):
    ds = []
    for d in range(2, n//2 + 1):
        if n % d == 0:
            ds.append(d)
            if len(ds) > 2:
                break
    if len(ds) == 2:
        print(ds[0], ds[1])
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы