Top.Mail.Ru
Ответы

Помогите решить задачи на python! Пожалуйста

Задача №1.
Дружественные числа -– это два натуральных числа, таких, что сумма всех
делителей одного числа (меньших самого этого числа) равна другому числу, и
наоборот. Напишите программу, которая проверяет пару чисел на
"дружественность". Используйте функцию, которая вычисляет сумму
делителей числа.
Входные данные
Входная строка содержит два натуральных числа.
Выходные данные
Программа должна вывести слово 'YES', если полученные числа –
дружественные, и слово 'NO' в противном случае.
Задача №2.
Напишите программу, которая преобразует строку, содержащую имя,
отчество и фамилию человека, к форме
<фамилия> <инициалы>
Входные данные
Входная строка содержит имя, отчество и фамилию, разделённые
одиночными пробелами.
Выходные данные
Программа должна вывести в одной строке сначала фамилию, а потом (через
пробел) – инициалы.
Задача №3.
Дан файл f компоненты которого являются действительными числами. Найти
сумму наибольшего и наименьшего из значений компонент.

По дате
По Рейтингу
Аватар пользователя
Новичок
6мес

Код 1:

1234567891011121314151617181920212223
 def sum_of_divisors(n): 
    """Возвращает сумму всех делителей числа n (меньших самого этого числа).""" 
    divisors_sum = 1  # 1 всегда делитель любого натурального числа 
    for i in range(2, int(n**0.5) + 1):  # Делители ищем до корня из n для оптимизации 
        if n % i == 0: 
            divisors_sum += i 
            if i != n // i:  # Если делитель не является квадратом числа, добавляем также сопряженный делитель 
                divisors_sum += n // i 
    return divisors_sum 
 
def are_friends_numbers(a, b): 
    """Проверяет, являются ли два числа дружественными.""" 
    return sum_of_divisors(a) == b and sum_of_divisors(b) == a 
 
# Ввод данных 
a, b = map(int, input().split()) 
 
# Проверка и вывод результата 
if are_friends_numbers(a, b): 
    print('YES') 
else: 
    print('NO') 
 

Код 2:

12345678910111213
 def format_fio(full_name): 
    """Преобразует полное имя к формату <фамилия> <инициалы>.""" 
    name, middle_name, surname = full_name.split() 
    initials = f"{name[0]}.{middle_name[0]}." 
    return f"{surname} {initials}" 
 
# Ввод данных 
full_name = input() 
 
# Преобразование и вывод результата 
formatted_fio = format_fio(full_name) 
print(formatted_fio) 
 

Код 3:

1234567891011121314151617181920212223242526
 def sum_of_min_and_max_in_file(file_path): 
    """Читает файл с числами и возвращает сумму наименьшего и наибольшего чисел.""" 
    try: 
        with open(file_path, 'r') as file: 
            numbers = list(map(float, filter(str.strip, file.read().split()))) 
            if not numbers:  # Проверяем, что список не пуст 
                raise ValueError("Файл содержит нет допустимых чисел.") 
            min_number = min(numbers) 
            max_number = max(numbers) 
        return min_number + max_number 
    except FileNotFoundError: 
        print(f"Ошибка: Файл по пути '{file_path}' не найден.") 
    except ValueError as e: 
        print(f"Ошибка при обработке файла: {e}") 
    except Exception as e: 
        print(f"Неизвестная ошибка: {e}") 
 
# Путь к файлу (например, 'C:\\Users\\Admin\\Desktop\\f.txt') 
file_path = r'C:\Users\Admin\Desktop\f.txt' 
 
# Вычисление и вывод результата 
result = sum_of_min_and_max_in_file(file_path) 
if result is not None: 
    print(result) 

 
Аватар пользователя
Мудрец
6мес

Про дружественные числа безо всяких шустреньких ботов... И одной функцией

123456789101112
 def f(a,b):  
    def get_divisors(number):  
        result = {1, number}  
        for divisor in range(1, number // 2  + 1):  
          if not number % divisor:  
              result.add(divisor)                
        return sum(sorted(result)[:-1] )  
    return ['NO','YES'][get_divisors(a) == b and get_divisors(b) == a]  
 
print(f(220,284))  
print(f(100,284))
print(f(5020,5564)) 

YES
NO
YES

Аватар пользователя
Ученик
6мес

def mn(x):
d=2
yield 1
while x>1:
if x%d:
d+=1
else:
yield d
x//=d

def sumd(x):
import math,itertools
y=list(mn(x))
dels=[]
for k in ([ math.prod (i) for i in set(itertools.combinations(y, j))] for j in range(1,len(y))):
dels+=k
return sum(set(dels))

def isdr(a,b):
return "NO" if sumd(a)-sumd(b) else "YES"

print(isdr(220, 284), isdr(1210, 1092), sep="\n")

Аватар пользователя
Искусственный Интеллект
6мес

Если число - полный квадрат, то корень из него - это один делитель или два?

Аватар пользователя
Мастер
6мес
123456789101112131415
 def sum_of_divisors(n): 
    total = 0 
    for i in range(1, n): 
        if n % i == 0: 
            total += i 
    return total 
 
# Ввод двух чисел 
a, b = map(int, input().split()) 
 
# Проверка на дружественность 
if sum_of_divisors(a) == b and sum_of_divisors(b) == a: 
    print('YES') 
else: 
    print('NO') 
123456789101112
 # Ввод строки с именем, отчеством и фамилией 
full_name = input() 
 
# Разделяем строку на компоненты 
parts = full_name.split() 
 
# Формируем результат 
surname = parts[2] 
initials = parts[0][0] + parts[1][0] 
 
# Вывод результата 
print(surname, initials) 
1234567891011
 # Чтение данных из файла f и подсчет суммы наибольшего и наименьшего 
file_path = 'f.txt'  # предполагаем, что файл называется f.txt 
 
with open(file_path, 'r') as file: 
    numbers = list(map(float, file.readlines())) 
 
max_value = max(numbers) 
min_value = min(numbers) 
 
# Вывод суммы 
print(max_value + min_value)