1295 - Cif Pagini: Difference between revisions

From Bitnami MediaWiki
Sinn Erich (talk | contribs)
Pagină nouă: Sursa: [https://www.pbinfo.ro/probleme/4273/prodpp] == Cerinţa == Se dă numărul natural nenul '''n'''. Să se determine produsul primelor '''n''' pătrate perfecte nenule. == Date de intrare == Programul citește de la tastatură numărul '''n'''. == Date de ieșire == Programul va afișa pe ecran, mesajul "Datele introduse corespund cerințelor" și pe o linie nouă numărul '''P''' , reprezentând produsul primelor '''n''' pătrate perfecte nenule, în caz contrar prog...
 
Sinn Erich (talk | contribs)
 
(22 intermediate revisions by the same user not shown)
Line 1: Line 1:
Sursa: [https://www.pbinfo.ro/probleme/4273/prodpp]
Sursa: [https://www.pbinfo.ro/probleme/4273/prodpp]
== Cerinţa ==
== Cerinţa ==
Se dă numărul natural nenul '''n'''. Să se determine produsul primelor '''n''' pătrate perfecte nenule.
Î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 ==
== Date de intrare ==
Programul citește de la tastatură numărul '''n'''.
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 ==  
== Date de ieșire ==  
Programul va afișa pe ecran, mesajul "Datele introduse corespund cerințelor" și pe o linie nouă numărul '''P''' , reprezentând produsul primelor '''n''' pătrate perfecte nenule, în caz contrar programul va afișa pe o linie noua mesajul "Datele introduse nu corespund cerintelor."
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 ==
== 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().