Найти - Пользователи
Полная версия: Задание 25 егэ информатика
Начало » Центр помощи » Задание 25 егэ информатика
1
fuyukaidesu
У меня есть программа которая ищет числа с определенным кол вом делителей. Но она работает только если кол во делителей чётно. Как мне изменить(желательно минимально) программу чтобы она искала числа с нечётным кол вом делителей.
 from math import sqrt
divCount = 2  # нужное количество делителей
for n in range(652938, 1744328+1):
  divs = []
  q = round(sqrt(n))
  if q*q == n:
    divs = [q]
    q -= 1
  for d in range(1,q+1):
    if n % d == 0:
      divs = divs + [d, n//d]
      if len(divs) > divCount: break
  if len(divs) == divCount:
    print( *sorted(divs) )
AD0DE412
 from math import sqrt
divCount = 2  # нужное количество делителей
for n in range(1, 100+1):
  divs = []
  q = round(sqrt(n))
  if q*q == n:
    divs = [q]
    q -= 1
  for d in range(1,q+1):
    if n % d == 0:
      divs = divs + [d, n//d]
      if len(divs) == divCount:
        break
  if len(divs) > divCount:
    print( *sorted(divs) )
fuyukaidesu
AD0DE412
Извините возможно я некорректно сформулировал свою мысль. Я имел ввиду что если в divCount указать 5 делителей или другое нечётное кол во делителей программа должна их найти. Вы же изменили так что программа выводит числа у которых больше двух делителей так как в divCount указано 2.

AD0DE412
fuyukaidesu
выводит числа у которых больше двух делителей
не она выводит числа (последнее) с нечетным количеством делителей (ну кроме чисел с одним делителем)

поправиим это
 In [5]: from math import sqrt
   ...: divCount = 2  # нужное количество делителей
   ...: for n in range(1, 100+1):
   ...:   divs = []
   ...:   q = round(sqrt(n))
   ...:   if q*q == n:
   ...:     divs = [q]
   ...:     q -= 1
   ...:   for d in range(1,q+1):
   ...:     if n % d == 0:
   ...:       divs = divs + [d, n//d]
   ...:       if len(divs) == divCount:
   ...:         break
   ...:   if len(divs) > divCount or  len(divs) == 1:
   ...:     print(sorted(divs)[-1])
   ...:
   ...:
1
4
9
16
25
36
49
64
81
100

ну и с изменившемеся условиями
 In [8]: from math import sqrt
   ...: divCount = 2  # нужное количество делителей
   ...: num = 5
   ...: for n in range(1, 100+1):
   ...:   divs = []
   ...:   q = round(sqrt(n))
   ...:   if q*q == n:
   ...:     divs = [q]
   ...:     q -= 1
   ...:   for d in range(1,q+1):
   ...:     if n % d == 0:
   ...:       divs = divs + [d, n//d]
   ...:       if len(divs) == divCount:
   ...:         break
   ...:   if len(divs) == num and (len(divs) > divCount or  len(divs) == 1):
   ...:     print(sorted(divs)[-1])
   ...:
   ...:
   ...:
   ...:
   ...:
16
81
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB