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

Тема 25 задача 2853

ganilova: #Рассматриваются целые числа, принадлежащих числовому отрезку [309829; 365874], которые представляют собой произведение двух различных простых делителей. Найдите такое из этих чисел, у которого два простых делителя меньше всего отличаются друг от друга. В ответе запишите простые делители этого числа в порядке возрастания. Задача имеет два ответа [pre2] #создадим список простых чисел до 365875 p = [2, 3, 5, 7, 11, 13, 17, 19, 23, 29] for i in range(31, 365875): j = 0 f = True while p[ j] * p[ j] <= i and f: if i % p[ j] == 0: f = False j += 1 if f: p.append(i) ans = [] d = 100 # разница между делителями # найдём простое число ближайщее к корню нижней границы диапазона j = 0 while p[ j] * p [j] < 309829: j += 1 j -= 1 for x in range(309829, 365875): i = j while p[ i] * p[ i] < x: if x % p[ i] == 0 and x // p[ i] in p: if x // p[ i] - p[ i] < d: d = x // p[ i] - p[ i] ans = [(p[ i], x// p [ i])] elif x // p[ i] - p[ i] == d: ans.append((p[ i], x// p[ i])) i += 1 for x in ans: print(x) #получаем два ответа: #569 571 #599 601 [/pre2]

Ответов - 2

Поляков: Спасибо, уточнил условие.

doc.shuba: у моей задачи доп условие есть, вывести делители только у одного числа - наименьшего, подходящего условию mass = [] for i in range(309829, 365875): flag = 0 a = [] # делители m = [] number = i for j in range(1, int(i ** 0.5) + 1): if i % j == 0: a.append(j) if i // j != j: a.append(i // j) b = [] # простые делители for k in range(len(a)): c = set() # делители делителей c.add(a[k]) for o in range(1, int(a[k] ** 0.5) + 1): if a[k] % o == 0: c.add(o) if len(c) > 2: break if len(c) == 2 and a[k] != 1: b.append(a[k]) if len(b) >= 2: for x in range(len(b)): for y in range(len(b)): if b[x] * b[y] == i and b[x] != b[y]: mass.append(i) flag = 1 mm = abs(b[x] - b[y]) m.append(mm) min_m = min(m) break if (flag == 1 and i == mass[0]) or (flag == 1 and minus_new > min_m): num_new = i pros_new = b minus_new = min_m print("Подходящее число: ", num_new) print("Минимальная разница простых делителей: ", minus_new) print("Простые делители по возрастанию: ", *sorted(pros_new)) #Подходящее число: 324899 #Минимальная разница простых делителей: 2 #Простые делители по возрастанию: 569 571



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