<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.universitas.ro/index.php?action=history&amp;feed=atom&amp;title=1969_-_P_Digit</id>
	<title>1969 - P Digit - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.universitas.ro/index.php?action=history&amp;feed=atom&amp;title=1969_-_P_Digit"/>
	<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=1969_-_P_Digit&amp;action=history"/>
	<updated>2026-05-01T07:26:19Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.42.1</generator>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=1969_-_P_Digit&amp;diff=9995&amp;oldid=prev</id>
		<title>RebecaBud: Pagină nouă: == 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 &#039;&#039;&#039;&#039;cifra de control&#039;&#039;&#039; 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ă re...</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=1969_-_P_Digit&amp;diff=9995&amp;oldid=prev"/>
		<updated>2024-06-03T16:23:06Z</updated>

		<summary type="html">&lt;p&gt;Pagină nouă: == 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 &amp;#039;&amp;#039;&amp;#039;&amp;#039;cifra de control&amp;#039;&amp;#039;&amp;#039; 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ă re...&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;== Enunt ==&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Definim &amp;#039;&amp;#039;&amp;#039;&amp;#039;cifra de control&amp;#039;&amp;#039;&amp;#039; 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ă.&lt;br /&gt;
&lt;br /&gt;
De exemplu:&lt;br /&gt;
&lt;br /&gt;
c=digit(21756)8=digit(2+1+7+5+6)8=25, întrucât c&amp;gt;8 procedeul continuă&lt;br /&gt;
c=digit(25)8=digit(2+5)8=7.&lt;br /&gt;
== Cerinţa ==&lt;br /&gt;
Se consideră un interval închis [x,y]. Să se determine:&lt;br /&gt;
&lt;br /&gt;
* a – primul număr prim mai mare sau egal ca x&lt;br /&gt;
* b – baza minimă în care poate fi scris numărul prim a&lt;br /&gt;
* c – cifra de control a numărului prim a&lt;br /&gt;
* 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.&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Fișierul de intrare &amp;#039;&amp;#039;&amp;#039;pdigit.in&amp;#039;&amp;#039;&amp;#039; conține pe o singură linie două valori natural x și y cu semnificația din enunț.&lt;br /&gt;
== Date de ieșire ==&lt;br /&gt;
Fișierul de ieșire &amp;#039;&amp;#039;&amp;#039;pdigit.out&amp;#039;&amp;#039;&amp;#039; 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.&lt;br /&gt;
== Restricţii şi precizări ==&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;1 ≤ x ≤ y ≤ 5000000&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* intervalul [x,y] conține cel puțin un număr prim&lt;br /&gt;
* rezolvarea primei cerințe asigură 10% din punctaj&lt;br /&gt;
* rezolvarea cerinței a doua asigură 10% din punctaj&lt;br /&gt;
* rezolvarea cerinței a treia asigură 20% din punctaj&lt;br /&gt;
* Rezolvarea ultimei cerințe asigură 60% din punctaj&lt;br /&gt;
== Exemplul 1 ==&lt;br /&gt;
; pdigit.in&lt;br /&gt;
&lt;br /&gt;
  15 75&lt;br /&gt;
; pdigit.out&lt;br /&gt;
&lt;br /&gt;
  17&lt;br /&gt;
  8&lt;br /&gt;
  1&lt;br /&gt;
  3 &lt;br /&gt;
== Explicație == &lt;br /&gt;
Primul număr prim din interval este 17. Baza minimă în care poate fi scris numărul prim este 8.&lt;br /&gt;
* 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.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
def is_prime(n):&lt;br /&gt;
    if n &amp;lt;= 1:&lt;br /&gt;
        return False&lt;br /&gt;
    if n &amp;lt;= 3:&lt;br /&gt;
        return True&lt;br /&gt;
    if n % 2 == 0 or n % 3 == 0:&lt;br /&gt;
        return False&lt;br /&gt;
    i = 5&lt;br /&gt;
    while i * i &amp;lt;= n:&lt;br /&gt;
        if n % i == 0 or n % (i + 2) == 0:&lt;br /&gt;
            return False&lt;br /&gt;
        i += 6&lt;br /&gt;
    return True&lt;br /&gt;
&lt;br /&gt;
def digit_sum(num, base):&lt;br /&gt;
    result = sum(int(digit, base=base) for digit in str(num))&lt;br /&gt;
    while result &amp;gt;= base:&lt;br /&gt;
        result = sum(int(digit, base=base) for digit in str(result))&lt;br /&gt;
    return result&lt;br /&gt;
&lt;br /&gt;
def prime_in_interval(x, y):&lt;br /&gt;
    for num in range(x, y+1):&lt;br /&gt;
        if is_prime(num):&lt;br /&gt;
            return num&lt;br /&gt;
    return None&lt;br /&gt;
&lt;br /&gt;
def minimum_base(prime):&lt;br /&gt;
    return min(prime, 8)&lt;br /&gt;
&lt;br /&gt;
def control_digit(prime, base):&lt;br /&gt;
    return digit_sum(prime, base)&lt;br /&gt;
&lt;br /&gt;
def primes_with_control_digit(x, y, base, control_digit):&lt;br /&gt;
    count = 0&lt;br /&gt;
    for num in range(x, y+1):&lt;br /&gt;
        if is_prime(num):&lt;br /&gt;
            if digit_sum(num, base) == control_digit:&lt;br /&gt;
                count += 1&lt;br /&gt;
    return count&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
    with open(&amp;quot;pdigit.in&amp;quot;, &amp;quot;r&amp;quot;) as fin:&lt;br /&gt;
        x, y = map(int, fin.readline().split())&lt;br /&gt;
&lt;br /&gt;
    prime = prime_in_interval(x, y)&lt;br /&gt;
    base = minimum_base(prime)&lt;br /&gt;
    control = control_digit(prime, base)&lt;br /&gt;
    count = primes_with_control_digit(x, y, base, control)&lt;br /&gt;
&lt;br /&gt;
    with open(&amp;quot;pdigit.out&amp;quot;, &amp;quot;w&amp;quot;) as fout:&lt;br /&gt;
        fout.write(f&amp;quot;{prime}\n&amp;quot;)&lt;br /&gt;
        fout.write(f&amp;quot;{base}\n&amp;quot;)&lt;br /&gt;
        fout.write(f&amp;quot;{control}\n&amp;quot;)&lt;br /&gt;
        fout.write(f&amp;quot;{count}\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    main()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>RebecaBud</name></author>
	</entry>
</feed>