1295 - Cif Pagini: Difference between revisions

From Bitnami MediaWiki
Sinn Erich (talk | contribs)
Sinn Erich (talk | contribs)
 
(18 intermediate revisions by the same user not shown)
Line 16: Line 16:


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ă 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 ==
== Restricţii şi precizări ==
* 0 < '''n''' ⩽ 10
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 ==
== Exemplul 1 ==
; Intrare
; Datele de intrare:
: 4
: 3 103 1
; Ieșire
; Datele de ieșire:
: Datele corespund cerințelor.
: Datele sunt introduse corect.
: 576
: 319
<br>
<br>


 
== Exemplul 2 ==
; Datele de intrare:
: Introdu cele trei numere:
: 3 103 2
; Datele de ieșire:
: Datele sunt introduse corect.
: 9
<br>


== Rezolvare ==  
== Rezolvare ==  
<syntaxhighlight lang="python" line>
<syntaxhighlight lang="python" line>
#4273
#1295
def patrate_perfecte(n):
def is_prime(n):
     patrate = []
     """
     i = 1
    Verifică dacă un număr este prim sau nu.
     while len(patrate) < n:
     """
         patrat = i * i
     if n <= 1:
        patrate.append(patrat)
         return False
         i += 1
    for i in range(2, int(n**0.5)+1):
     return patrate
         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 calculeaza(numbers):
def find_consecutive_primes(n, p):
     product = 1
     """
     for number in numbers:
    Găsește primele n numere prime consecutive după p.
         product *= number
    """
     return product
    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 validare_numar(n):
def validate_input(n, p, v):
     if n < 1 or n > 10:
    """
    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 False
     return True
     return True


if __name__ == '__main__':
if __name__ == '__main__':
     n = int(input("Introduceți numărul n: "))
     n, p, v = map(int, input("Introdu cele trei numere:").split())
     if not validare_numar(n):
     if validate_input(n, p, v):
         print("Datele introduse nu corespund cerintelor.")
         print("Datele sunt corecte")
    else:
         total = calculate_total(n, p, v)
         squares = patrate_perfecte(n)
         print(total)
        product = calculeaza(squares)
        print("Datele introduse corespund cerintelor.")
         print(product)




</syntaxhighlight>
</syntaxhighlight>
'''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().

Latest revision as of 06:56, 27 April 2023

Sursa: [1]

Cerinţa[edit | edit source]

Î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[edit | edit source]

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[edit | edit source]

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[edit | edit source]

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[edit | edit source]

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


Exemplul 2[edit | edit source]

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


Rezolvare[edit | edit source]

<syntaxhighlight lang="python" line>

  1. 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)


</syntaxhighlight>

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().