1409 - Numere 11

De la Universitas MediaWiki

Cerinţa

Se dau n numere naturale. Calculați suma obținută prin adunarea celui mai mare divizor prim al fiecărui număr dat.

Date de intrare

Programul citește de la tastatură numărul n, iar apoi n numere naturale.

Date de ieşire

Programul va afișa pe ecran numărul S, reprezentând suma ceruta.

Restricții și precizări

  • 1 ≤ n ≤ 10000
  • cele n numere citite vor fi mai mari decât 1 și mai mici decât 1.000.000.000

Exemplu

Intrare
9

7 30 2 17 14 10 9 3 13

Ieșire
62

Explicație

7 + 5 + 2 + 17 + 7 + 5 + 3 + 3 + 13 = 62

Rezolvare

import math

def factor_prim_maxim(n):
    d = 2
    var = 0
    while n > 1:
        p = 0
        while n % d == 0:
            p += 1
            n //= d
        if p != 0:
            var = d
        d += 1
        if d * d > n:
            if n > 1:
                var = n
            break
    return var

def validare_date(n):
    if n < 1:
        print("Intrare nevalidă! Numărul de numere întregi trebuie să fie pozitiv.")
        return False
    return True

if __name__ == '__main__':
    n = int(input("Introduceți numărul de numere întregi: "))
    if validare_date(n):
        print("\nDatele de intrare corespund restricțiilor impuse.\n")
        s = 0
        for i in range(n):
            tmp = int(input(f"Introduceți numărul întreg {i+1}: "))
            s += factor_prim_maxim(tmp)
        print(s)

Explicație rezolvare

Acest program primește de la utilizator un număr n și n numere întregi și calculează suma factorilor primi maximi ai acestor numere. Programul verifică mai întâi dacă n este pozitiv și apoi calculează factorii primi maximi pentru fiecare număr întreg dat prin intermediul unei funcții numite factor_prim_maxim. Rezultatul final este suma totală a factorilor primi maximi.