1295 - Cif Pagini

De la Universitas MediaWiki
Versiunea pentru tipărire nu mai este suportată și poate avea erori de randare. Vă rugăm să vă actualizați bookmarkurile browserului și să folosiți funcția implicită de tipărire a browserului.

Sursa: [1]

Cerinţa

Într-o bibliotecă se află o carte cu o proprietate mai ciudată. Este alcătuită din n volume, și pentru fiecare fiecare volum numărul de pagini este număr prim. Mai mult, numerele paginilor volumelor sunt numere prime consecutive.

Se dau numerele n p v reprezentând numărul de volume ale cărții, numărul de pagini ale primului volum și numărul cerinței care trebuie rezolvate. Să se afle:

a) numărul total de pagini;

b) numărul total de cifre folosite pentru numerotarea paginilor celor n volume.

Date de intrare

Programul conține pe prima linie numerele n p v reprezentând numărul de volume ale unei cărți, numărul de pagini ale primului volum și respectiv numărul cerinței.

Date de ieșire

Dacă v=1, programul va conține numărul nt , reprezentând numărul total de pagini.

Dacă v=2, programul va conține numărul np, reprezentând numărul total de cifre folosite pentru numerotarea paginilor celor n volume.

Dacă datele sunt introduse corect, pe ecran se va afișa: "Datele sunt introduse corect.", apoi pe un rând nou afișează a) numărul total de pagini b) numărul total de cifre folosite pentru numerotarea paginilor celor n volume.

În caz contrar, se va afișa pe ecran: "Datele nu corespund restricțiilor impuse."

Restricţii şi precizări

1 ≤ n ≤ 1000

1 ≤ p < 50.000

v poate fi doar 1 sau 2;

Paginile volumelor se numerotează de la 1 la numărul total de pagini; dacă primul volum are k pagini, atunci volumul al doilea se va numerota cu k+1, ș.a.m.d.

Exemplul 1

Datele de intrare
3 103 1
Datele de ieșire
Datele sunt introduse corect.
319


Exemplul 2

Datele de intrare
Introdu cele trei numere:
3 103 2
Datele de ieșire
Datele sunt introduse corect.
9


Rezolvare

#1295
def is_prime(n):
    """
    Verifică dacă un număr este prim sau nu.
    """
    if n <= 1:
        return False
    for i in range(2, int(n**0.5)+1):
        if n % i == 0:
            return False
    return True

def num_digits(n):
    """
    Numără numărul de cifre dintr-un număr.
    """
    return len(str(n))

def find_consecutive_primes(n, p):
    """
    Găsește primele n numere prime consecutive după p.
    """
    pages = []
    num = p
    while len(pages) < n:
        if is_prime(num):
            pages.append(num)
        num += 1
    return pages

def calculate_total(n, p, v):
    """
    Calculează numărul total de pagini sau cifre.
    """
    pages = find_consecutive_primes(n, p)
    if v == 1:
        total_pages = sum(pages)
        return total_pages
    elif v == 2:
        total_digits = sum(num_digits(p) for p in pages)
        return total_digits

def validate_input(n, p, v):
    """
    Verifică dacă datele introduse sunt corecte.
    """
    if n <= 0 or p <= 0 or v not in [1, 2]:
        print( "Datele nu corespund restricțiilor impuse.")
        return False
    return True

if __name__ == '__main__':
    n, p, v = map(int, input("Introdu cele trei numere:").split())
    if validate_input(n, p, v):
        print("Datele sunt corecte")
        total = calculate_total(n, p, v)
        print(total)

Explicatie cod:

Acest cod definește trei funcții și le folosește pentru a calcula numărul total de pagini sau cifre într-un set de cărți.

Funcția is_prime(n) primește un număr întreg n și returnează True dacă este prim și False în caz contrar. Această funcție utilizează un algoritm de determinare a primelor, parcurgând toate numerele de la 2 la radicalul pătrat al lui n și verificând dacă n este divizibil cu vreunul dintre acestea.

Funcția num_digits(n) primește un număr întreg n și returnează numărul de cifre din n. Pentru a face acest lucru, funcția transformă întregul într-un șir de caractere utilizând str(n) și returnează lungimea acestuia utilizând len().

Funcția find_consecutive_primes(n, p) primește doi parametri întregi, n și p, și găsește primele n numere prime consecutive începând cu p. Această funcție utilizează funcția is_prime() pentru a verifica dacă fiecare număr este prim și adaugă numerele prime găsite într-o listă până când lungimea listei este egală cu n.

Funcția calculate_total(n, p, v) primește trei parametri întregi, n, p și v, și calculează numărul total de pagini sau cifre, în funcție de valoarea lui v. Această funcție utilizează funcția find_consecutive_primes() pentru a găsi numerele prime și returnează suma lor dacă v este 1 sau suma numărului de cifre ale acestora dacă v este 2.

În cele din urmă, codul citește trei numere întregi de la tastatură și apelează funcția calculate_total() cu acestea pentru a calcula numărul total de pagini sau cifre, în funcție de valoarea celui de-al treilea număr. Rezultatul este apoi afișat utilizând print().