3460 - FirstPrime: Diferență între versiuni

De la Universitas MediaWiki
Fără descriere a modificării
Fără descriere a modificării
Linia 80: Linia 80:
==Explicaţie cod==
==Explicaţie cod==
Funcția '''este_prim(n)''' primește un număr întreg pozitiv '''n''' și returnează '''True''' dacă '''n''' este prim și '''False''' în caz contrar. Implementarea folosește o metodă eficientă de verificare a primalității care verifică toți divizorii numărului '''n''' până la radicalul pătrat din '''n'''.
Funcția '''este_prim(n)''' primește un număr întreg pozitiv '''n''' și returnează '''True''' dacă '''n''' este prim și '''False''' în caz contrar. Implementarea folosește o metodă eficientă de verificare a primalității care verifică toți divizorii numărului '''n''' până la radicalul pătrat din '''n'''.
Funcția '''fp(x)''' primește un număr întreg pozitiv '''x''' și returnează cel mai mic număr prim care îl divide pe '''x''' sau '''0''' dacă '''x''' este mai mic decât '''2''' sau nu are divizori primi.
Funcția '''fp(x)''' primește un număr întreg pozitiv '''x''' și returnează cel mai mic număr prim care îl divide pe '''x''' sau '''0''' dacă '''x''' este mai mic decât '''2''' sau nu are divizori primi.
În programul principal, citim numărul '''n''' și cele '''n''' numere naturale de la tastatură, stocate în lista numere.
În programul principal, citim numărul '''n''' și cele '''n''' numere naturale de la tastatură, stocate în lista numere.
Pentru a calcula suma '''FP'''-urilor celor '''n''' numere, iterăm prin lista numere și pentru fiecare element apelăm funcția '''fp(x)''' pentru a determina cel mai mic număr prim care îl divide pe '''x'''. Suma acestor valori este stocată în variabila '''suma_fp'''.
Pentru a calcula suma '''FP'''-urilor celor '''n''' numere, iterăm prin lista numere și pentru fiecare element apelăm funcția '''fp(x)''' pentru a determina cel mai mic număr prim care îl divide pe '''x'''. Suma acestor valori este stocată în variabila '''suma_fp'''.
La final, afișăm valoarea variabilei '''suma_fp'''.
La final, afișăm valoarea variabilei '''suma_fp'''.

Versiunea de la data 8 aprilie 2023 15:39

Sursa: - FirstPrime


Cerinţa

Se dau n numere naturale. Definim FP(x) cel mai mic număr prim care îl divide pe x. Aflați suma FP-urilor celor n numere.

Date de intrare

Programul citește de la tastatură numărul n, iar apoi n numere naturale, separate prin spații.

Date de ieșire

Dacă datele sunt introduse corect, pe ecran se va afișa: "Datele sunt corecte.", iar apoi va afișa pe ecran numărul S. În caz contrar, se va afișa pe ecran: "Datele nu sunt comform restricțiilor impuse.".

Restricţii şi precizări

  • 2 ≤ n ≤ 1.000.000
  • cele n numere citite vor fi mai mici decât 100.000.000

Exemple

Exemplul 1

Intrare
4
2 13 9 25
Ieșire
Datele sunt corecte.
23

Exemplul 2

Intrare
5
16 7 90 19 82
Ieșire
Datele sunt corecte.
32

Exemplul 3

Intrare
2
314515341535441 412351541241
Ieșire
Datele nu sunt comform restricțiilor impuse.


Rezolvare

#3460 FirstPrime

def este_prim(n):
    if n < 2:
        return False
    for i in range(2, int(n ** 0.5) + 1):
        if n % i == 0:
            return False
    return True


def fp(x):
    if x < 2:
        return 0
    for i in range(2, int(x ** 0.5) + 1):
        if x % i == 0:
            return i if este_prim(i) else 0
    return x
    
    
def conform_restrictiilor():
    n = int(input())
    vector = list(map(int, input().split()))
    if not 2 <= n <= 1000000:
        print("Datele nu sunt conform restricțiilor impuse.")
        exit()
    for x in vector:
        if x > 100000000:
            print("Datele nu sunt conform restricțiilor impuse.")
            exit()
    print("Datele sunt corecte.")
    return vector, n
        

if __name__ == '__main__':
    vector , n = conform_restrictiilor()
    suma_fp = sum(fp(x) for x in vector)
    print(suma_fp)

Explicaţie cod

Funcția este_prim(n) primește un număr întreg pozitiv n și returnează True dacă n este prim și False în caz contrar. Implementarea folosește o metodă eficientă de verificare a primalității care verifică toți divizorii numărului n până la radicalul pătrat din n.

Funcția fp(x) primește un număr întreg pozitiv x și returnează cel mai mic număr prim care îl divide pe x sau 0 dacă x este mai mic decât 2 sau nu are divizori primi.

În programul principal, citim numărul n și cele n numere naturale de la tastatură, stocate în lista numere. Pentru a calcula suma FP-urilor celor n numere, iterăm prin lista numere și pentru fiecare element apelăm funcția fp(x) pentru a determina cel mai mic număr prim care îl divide pe x. Suma acestor valori este stocată în variabila suma_fp. La final, afișăm valoarea variabilei suma_fp.