0702 - Pascal: Difference between revisions
Pagină nouă: Triunghiul lui Pascal este un aranjament geometric de numere ce poartă numele celebrului matematician francez Blaise Pascal (19 iunie 1623 – 19 august 1662), deoarece el a fost prima persoană care a descoperit importanţa tuturor modelelor din componenţa acestuia. Triunghiul începe cu numărul 1. Acest rând este considerat rândul 0 al triunghiului. Restul numerelor din acest triunghi se formează ca suma celor două numere de deasupra (considerând că toate numerele... |
|||
Line 14: | Line 14: | ||
Fișierul de ieșire pascalout.txt va conține pe prima linie numărul M(p) cu semnificația de mai sus. | Fișierul de ieșire pascalout.txt va conține pe prima linie numărul M(p) cu semnificația de mai sus. | ||
== Restricții și precizări == | == Restricții și precizări == | ||
*'''2 ≤ n ≤ | *'''2 ≤ n ≤ 10^9''' | ||
*'''2 ≤ p ≤ | *'''2 ≤ p ≤ 10^3''' | ||
*30% din teste au n ≤ | *30% din teste au n ≤ 10^4 | ||
*50% din teste au n ≤ | *50% din teste au n ≤ 10^6 | ||
== Exemplul 1 == | == Exemplul 1 == | ||
; pascalin.txt | ; pascalin.txt |
Revision as of 22:06, 9 January 2024
Triunghiul lui Pascal este un aranjament geometric de numere ce poartă numele celebrului matematician francez Blaise Pascal (19 iunie 1623 – 19 august 1662), deoarece el a fost prima persoană care a descoperit importanţa tuturor modelelor din componenţa acestuia.
Triunghiul începe cu numărul 1. Acest rând este considerat rândul 0 al triunghiului. Restul numerelor din acest triunghi se formează ca suma celor două numere de deasupra (considerând că toate numerele din afara triunghiului sunt întotdeauna zero). Prin urmare, rândul 1 va fi format din 1 = 0 + 1, 1 = 1 + 0, iar rândul 2 va fi format din 1 = 0 + 1, 2 = 1 + 1, 1 = 1 + 0.
Fie n și p două numere naturale nenule cu proprietățile:
- p este număr prim;
- n+1 este o putere naturală a lui p;
Notăm cu M(p) numărul de multipli de p din primele n+1 rânduri ale triunghiului lui Pascal.
Cerința
Să se scrie un program care citeşte numerele naturale n şi p și determină numărul M(p).
Date de intrare
Fișierul de intrare pascalin.txt conține pe prima linie numerele naturale n și p separate printr-un spațiu.
Date de ieșire
Fișierul de ieșire pascalout.txt va conține pe prima linie numărul M(p) cu semnificația de mai sus.
Restricții și precizări
- 2 ≤ n ≤ 10^9
- 2 ≤ p ≤ 10^3
- 30% din teste au n ≤ 10^4
- 50% din teste au n ≤ 10^6
Exemplul 1
- pascalin.txt
- 7 2
- pascalout.txt
- 9
Explicatie
În primele 8 rânduri ale triunghiului se găsesc 9 multipli de 2: 2,4,6,4,10,10,6,20,6.
Exemplul 2
- pascalin.txt
- 2196 13
- pascalout.txt
- 1660932
Explicatie
n primele 2197 rânduri ale triunghiului se găsesc 1660932 multipli de 13.
Rezolvare
<syntaxhighlight lang="python" line>
- 0702 - Pascal
def is_prime(num):
if num < 2: return False for i in range(2, int(num**0.5) + 1): if num % i == 0: return False return True
def calculate_M_pascal(n, p):
M_p = 0 current_power = 1 while current_power <= n + 1: M_p += (n + 1) // current_power current_power *= p return M_p
def check_restrictions(n, p):
if not (2 <= n <= 10**9): return False if not (2 <= p <= 10**3): return False if n > 10**4 and p > 2: return False if n > 10**6 and p > 2: return False return True
def main():
# Citirea datelor de intrare with open('pascalin.txt', 'r') as file: n, p = map(int, file.readline().split())
# Verificare restricții if not check_restrictions(n, p): print("false") return
# Verificare dacă p este prim if not is_prime(p): print("false") return
# Calculul lui M(p) result = calculate_M_pascal(n, p)
# Scrierea rezultatului în fișierul de ieșire with open('pascalout.txt', 'w') as file: file.write(str(result))
if __name__ == "__main__":
main()
</syntaxhighlight>