Advertisement
genium08

Divisors and factorization

Sep 24th, 2024
30
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 4.88 KB | Software | 0 0
  1. 0. Задача о нахождении всех делителей числа.
  2. def factorize(num):
  3.     sp = []
  4.     for i in range(2, int(num ** 0.5) + 1):
  5.         while num % i == 0:
  6.             sp.append(i)
  7.             num //= i
  8.     if num != 1:
  9.         sp.append(num)
  10.     return sp
  11.  
  12.  
  13. def divisors(sp):
  14.     divide = [1]
  15.     for i in sp:
  16.         for j in range(len(divide)):
  17.             divide.append(divide[j] * i)
  18.     return sorted(list(set(divide)))
  19.  
  20.  
  21. num = int(input("Введите число: "))
  22. print("Простые делители числа: ", end="")
  23. print(*sorted(set(factorize(num))), sep=", ")
  24. print("Все делители числа: ", end="")
  25. print(*divisors(factorize(num)), sep=", ")
  26.  
  27. 1) Напишите программу, которая ищет среди целых чисел, принадлежащих числовому отрезку [126849; 126871], числа, имеющие ровно 4 различных делителя. Выведите эти четыре делителя для каждого найденного числа в порядке возрастания.
  28. def factorize(num):
  29.     sp = []
  30.     for i in range(2, int(num ** 0.5) + 1):
  31.         while num % i == 0:
  32.             sp.append(i)
  33.             num //= i
  34.     if num != 1:
  35.         sp.append(num)
  36.     return sp
  37.  
  38. def all_divisors(sp):
  39.     divide = [1]
  40.     for i in sp:
  41.         for j in range(len(divide)):
  42.             divide.append(divide[j] * i)
  43.     return sorted(list(set(divide)))
  44.    
  45.    
  46. for i in range(126849, 126871 + 1):
  47.     divisors = all_divisors(factorize(i))
  48.     if len(divisors) == 4:
  49.         print(f"Все делители числа {i}: ", end="")
  50.         print(*divisors, sep=", ")
  51.  
  52. 32) (Б.С. Михлин) Напишите программу, которая ищет среди целых чисел, принадлежащих числовому отрезку [394441; 394505], числа, имеющие максимальное количество различных делителей. Если таких чисел несколько, то найдите минимальное из них. Выведите количество делителей найденного числа и два наибольших делителя в порядке убывания.
  53. def count_divisors(num):
  54.     counter = 1
  55.     for i in range(2, int(num ** 0.5) + 1):
  56.         if num % i == 0:
  57.             counter += 2
  58.         if i == int(num ** 0.5):
  59.             counter -= 1
  60.     return counter
  61.  
  62. def find_divisors(num):
  63.     divis = [num]
  64.     for i in range(int(num ** 0.5), 0, -1):
  65.         if num % i == 0:
  66.             divis.append(i)
  67.     return divis
  68.  
  69. divis_num, max_num = 0, 0
  70. for i in range(394441, 394505 + 1):
  71.     tmp = count_divisors(i)
  72.     if tmp > divis_num:
  73.         divis_num = tmp
  74.         max_num = i
  75. print(divis_num, *find_divisors(max_num), sep=", ")
  76.  
  77. 40) Напишите программу, которая ищет среди целых чисел, принадлежащих числовому отрезку [2943444; 2943529], простые числа. Выведите все найденные простые числа в порядке возрастания, слева от каждого числа выведите его номер по порядку.
  78. def is_prime(num):
  79.     if num == 2:
  80.         return True
  81.     if num < 2 or num % 2 == 0:
  82.         return False
  83.     for i in range(3, int(num ** 0.5) + 1, 2):
  84.         if num % i == 0:
  85.             return False
  86.     return True
  87.  
  88. count = 1
  89. for i in range(2943444, 2943529 + 1):
  90.     if is_prime(i):
  91.         print(f"{count}) {i}")
  92.         count += 1
  93.  
  94. 67) (П.Е. Финкель, г. Тимашевск) Уникальным назовём число, если у него только третья и пятая цифры чётные. Для интервала [33333;55555] найдите количество таких чисел, которые не делятся на 6, 7, 8  и разность максимального и минимального из них. В ответе укажите два числа: сначала количество чисел, а потом разность.
  95. def is_unique(num):
  96.     num_str = str(num)
  97.     even_num = ['0', '2', '4', '6', '8']
  98.     if (num_str[2] in even_num and num_str[4] in even_num) and (
  99.             num_str[0] not in even_num and num_str[1] not in even_num and num_str[3] not in even_num):
  100.         return True
  101.     return False
  102.  
  103.  
  104. min_num, max_num, counter = None, None, 0
  105. for i in range(33333, 55555 + 1):
  106.     if is_unique(i):
  107.         if i % 6 != 0 and i % 7 != 0 and i % 8 != 0:
  108.             if min_num is None or i < min_num:
  109.                 min_num = i
  110.             if max_num is None or i > max_num:
  111.                 max_num = i
  112.             counter += 1
  113.  
  114. print(f"Counter: {counter}")
  115. print(f"Difference: {max_num - min_num}")
  116.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement