Jump to content
Main menu
Main menu
move to sidebar
hide
Navigation
Main page
Recent changes
Random page
Help about MediaWiki
Bitnami MediaWiki
Search
Search
Create account
Log in
Personal tools
Create account
Log in
Pages for logged out editors
learn more
Contributions
Talk
Editing
1969 - P Digit
Page
Discussion
English
Read
Edit
Edit source
View history
Tools
Tools
move to sidebar
hide
Actions
Read
Edit
Edit source
View history
General
What links here
Related changes
Special pages
Page information
Warning:
You are not logged in. Your IP address will be publicly visible if you make any edits. If you
log in
or
create an account
, your edits will be attributed to your username, along with other benefits.
Anti-spam check. Do
not
fill this in!
== Enunt == Fie a un număr natural scris în baza 10. Notăm cu b, baza minimă în care poate fi scris a. Astfel, dacă a=21756, atunci baza minimă în care acesta poate fi scris este b=8. Definim ''''cifra de control''' a numărului a scris în baza b, notată cu c=digit(a)b, ca fiind numărul de o cifră obținut prin adunarea în baza b a cifrelor numărului a. Dacă rezultatul obținut este de o cifră, atunci acesta reprezintă valoarea lui c, dacă nu, se aplică repetat asupra rezultatului procedeul de însumare a cifrelor în baza b până când se obține o cifră. De exemplu: c=digit(21756)8=digit(2+1+7+5+6)8=25, întrucât c>8 procedeul continuă c=digit(25)8=digit(2+5)8=7. == Cerinţa == Se consideră un interval închis [x,y]. Să se determine: * a – primul număr prim mai mare sau egal ca x * b – baza minimă în care poate fi scris numărul prim a * c – cifra de control a numărului prim a * n – numărul de numere prime din intervalul [x,y] ce pot fi scrise în baza b și au cifra de control egală cu c. == Date de intrare == Fișierul de intrare '''pdigit.in''' conține pe o singură linie două valori natural x și y cu semnificația din enunț. == Date de ieșire == Fișierul de ieșire '''pdigit.out''' va conține patru valori naturale a, b, c și n, scrise fiecare pe câte o linie, valori ce reprezintă în ordine: primul număr prim strict mai mare sau egal ca x, baza minimă în care poate fi scris numărul prim a, cifra de control a numărului prim a, numărul de numere prime scrise în baza b din intervalul [x,y] care au cifra de control egală cu c. == Restricţii şi precizări == * '''1 ≤ x ≤ y ≤ 5000000''' * intervalul [x,y] conține cel puțin un număr prim * rezolvarea primei cerințe asigură 10% din punctaj * rezolvarea cerinței a doua asigură 10% din punctaj * rezolvarea cerinței a treia asigură 20% din punctaj * Rezolvarea ultimei cerințe asigură 60% din punctaj == Exemplul 1 == ; pdigit.in 15 75 ; pdigit.out 17 8 1 3 == Explicație == Primul număr prim din interval este 17. Baza minimă în care poate fi scris numărul prim este 8. * Cifra de contro a numărului prim este 1. Sunt 3 numere prime în intervalul dat ce pot fi scrise în baza 8, și au cifra de control egală cu 1: 17, 53, 71. <br> == Rezolvare == <syntaxhighlight lang="python" line> def is_prime(n): if n <= 1: return False if n <= 3: return True if n % 2 == 0 or n % 3 == 0: return False i = 5 while i * i <= n: if n % i == 0 or n % (i + 2) == 0: return False i += 6 return True def digit_sum(num, base): result = sum(int(digit, base=base) for digit in str(num)) while result >= base: result = sum(int(digit, base=base) for digit in str(result)) return result def prime_in_interval(x, y): for num in range(x, y+1): if is_prime(num): return num return None def minimum_base(prime): return min(prime, 8) def control_digit(prime, base): return digit_sum(prime, base) def primes_with_control_digit(x, y, base, control_digit): count = 0 for num in range(x, y+1): if is_prime(num): if digit_sum(num, base) == control_digit: count += 1 return count def main(): with open("pdigit.in", "r") as fin: x, y = map(int, fin.readline().split()) prime = prime_in_interval(x, y) base = minimum_base(prime) control = control_digit(prime, base) count = primes_with_control_digit(x, y, base, control) with open("pdigit.out", "w") as fout: fout.write(f"{prime}\n") fout.write(f"{base}\n") fout.write(f"{control}\n") fout.write(f"{count}\n") if __name__ == "__main__": main() </syntaxhighlight>
Summary:
Please note that all contributions to Bitnami MediaWiki may be edited, altered, or removed by other contributors. If you do not want your writing to be edited mercilessly, then do not submit it here.
You are also promising us that you wrote this yourself, or copied it from a public domain or similar free resource (see
Bitnami MediaWiki:Copyrights
for details).
Do not submit copyrighted work without permission!
Cancel
Editing help
(opens in new window)
Toggle limited content width