<?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=0676_-_Count_Prim_Sub</id>
	<title>0676 - Count Prim Sub - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.universitas.ro/index.php?action=history&amp;feed=atom&amp;title=0676_-_Count_Prim_Sub"/>
	<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=0676_-_Count_Prim_Sub&amp;action=history"/>
	<updated>2026-06-17T09:27:40Z</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=0676_-_Count_Prim_Sub&amp;diff=8843&amp;oldid=prev</id>
		<title>Brianna Waltner: Pagină nouă: == Cerinţa == Considerăm un arbore binar cu &#039;&#039;&#039;n&#039;&#039;&#039; noduri în care fiecare nod este numerotat de la &#039;&#039;&#039;1&#039;&#039;&#039; la &#039;&#039;&#039;n&#039;&#039;&#039; și conține o valoare număr natural. Se dau &#039;&#039;&#039;k&#039;&#039;&#039; noduri din arbore și se cere determinarea, pentru fiecare nod, a numărului de noduri din subarborele cu rădăcina în acel nod care conțin valori prime. == Date de intrare == Fișierul de intrare &#039;&#039;&#039;countprimsubin.txt&#039;&#039;&#039; conține pe prima linie numărul &#039;&#039;&#039;n&#039;&#039;&#039;. Fiecare dintre următoarele &#039;&#039;&#039;n&#039;&#039;&#039; l...</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=0676_-_Count_Prim_Sub&amp;diff=8843&amp;oldid=prev"/>
		<updated>2024-01-03T14:00:57Z</updated>

		<summary type="html">&lt;p&gt;Pagină nouă: == Cerinţa == Considerăm un arbore binar cu &amp;#039;&amp;#039;&amp;#039;n&amp;#039;&amp;#039;&amp;#039; noduri în care fiecare nod este numerotat de la &amp;#039;&amp;#039;&amp;#039;1&amp;#039;&amp;#039;&amp;#039; la &amp;#039;&amp;#039;&amp;#039;n&amp;#039;&amp;#039;&amp;#039; și conține o valoare număr natural. Se dau &amp;#039;&amp;#039;&amp;#039;k&amp;#039;&amp;#039;&amp;#039; noduri din arbore și se cere determinarea, pentru fiecare nod, a numărului de noduri din subarborele cu rădăcina în acel nod care conțin valori prime. == Date de intrare == Fișierul de intrare &amp;#039;&amp;#039;&amp;#039;countprimsubin.txt&amp;#039;&amp;#039;&amp;#039; conține pe prima linie numărul &amp;#039;&amp;#039;&amp;#039;n&amp;#039;&amp;#039;&amp;#039;. Fiecare dintre următoarele &amp;#039;&amp;#039;&amp;#039;n&amp;#039;&amp;#039;&amp;#039; l...&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;== Cerinţa ==&lt;br /&gt;
Considerăm un arbore binar cu &amp;#039;&amp;#039;&amp;#039;n&amp;#039;&amp;#039;&amp;#039; noduri în care fiecare nod este numerotat de la &amp;#039;&amp;#039;&amp;#039;1&amp;#039;&amp;#039;&amp;#039; la &amp;#039;&amp;#039;&amp;#039;n&amp;#039;&amp;#039;&amp;#039; și conține o valoare număr natural. Se dau &amp;#039;&amp;#039;&amp;#039;k&amp;#039;&amp;#039;&amp;#039; noduri din arbore și se cere determinarea, pentru fiecare nod, a numărului de noduri din subarborele cu rădăcina în acel nod care conțin valori prime.&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Fișierul de intrare &amp;#039;&amp;#039;&amp;#039;countprimsubin.txt&amp;#039;&amp;#039;&amp;#039; conține pe prima linie numărul &amp;#039;&amp;#039;&amp;#039;n&amp;#039;&amp;#039;&amp;#039;. Fiecare dintre următoarele &amp;#039;&amp;#039;&amp;#039;n&amp;#039;&amp;#039;&amp;#039; linii contine câte &amp;#039;&amp;#039;&amp;#039;3&amp;#039;&amp;#039;&amp;#039; numere &amp;#039;&amp;#039;&amp;#039;X st dr&amp;#039;&amp;#039;&amp;#039;; linia &amp;#039;&amp;#039;&amp;#039;i + 1&amp;#039;&amp;#039;&amp;#039; din fișier conține informatiile despre nodul numerotat cu &amp;#039;&amp;#039;&amp;#039;i&amp;#039;&amp;#039;&amp;#039;: &amp;#039;&amp;#039;&amp;#039;X&amp;#039;&amp;#039;&amp;#039; reprezintă valoare din nod, &amp;#039;&amp;#039;&amp;#039;st&amp;#039;&amp;#039;&amp;#039; reprezintă numărul de ordine al descendentului stâng sau &amp;#039;&amp;#039;&amp;#039;0&amp;#039;&amp;#039;&amp;#039; dacă nodul &amp;#039;&amp;#039;&amp;#039;i&amp;#039;&amp;#039;&amp;#039; nu are descendent stâng, iar &amp;#039;&amp;#039;&amp;#039;dr&amp;#039;&amp;#039;&amp;#039; reprezintă numărul de ordine al descendentului drept sau &amp;#039;&amp;#039;&amp;#039;0&amp;#039;&amp;#039;&amp;#039; dacă nodul &amp;#039;&amp;#039;&amp;#039;i&amp;#039;&amp;#039;&amp;#039; nu are descendent drept.&lt;br /&gt;
&lt;br /&gt;
Pe următoarea linie se află numărul &amp;#039;&amp;#039;&amp;#039;k&amp;#039;&amp;#039;&amp;#039;, iar pe fiecare dintre următoarele&amp;#039;&amp;#039;&amp;#039;k&amp;#039;&amp;#039;&amp;#039; linii se află câte un număr natural cuprins între &amp;#039;&amp;#039;&amp;#039;1&amp;#039;&amp;#039;&amp;#039; și &amp;#039;&amp;#039;&amp;#039;n&amp;#039;&amp;#039;&amp;#039;, reprezentând nodul curent.&lt;br /&gt;
== Date de ieșire ==&lt;br /&gt;
Fișierul de ieșire &amp;#039;&amp;#039;&amp;#039;countprimsubout.txt&amp;#039;&amp;#039;&amp;#039; va conține &amp;#039;&amp;#039;&amp;#039;k&amp;#039;&amp;#039;&amp;#039; linii; fiecare linie va conține numărul de noduri din subarborele cu rădăcina în nodul corespunzător.&lt;br /&gt;
== Restricţii şi precizări ==&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;1 ≤ n ≤ 1000&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* valorile din nodurile arborelui vor fi mai mici sau egale cu &amp;#039;&amp;#039;&amp;#039;1.000.000&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;1 ≤ k ≤ 1000&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
== Exemplul 1 ==&lt;br /&gt;
; &amp;#039;&amp;#039;&amp;#039;countprimsubin.txt&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
 6&lt;br /&gt;
 2 3 5&lt;br /&gt;
 6 0 6&lt;br /&gt;
 1 0 0&lt;br /&gt;
 7 1 2&lt;br /&gt;
 4 0 0&lt;br /&gt;
 10 0 0&lt;br /&gt;
 4&lt;br /&gt;
 1&lt;br /&gt;
 2&lt;br /&gt;
 4&lt;br /&gt;
 2&lt;br /&gt;
; &amp;#039;&amp;#039;&amp;#039;countprimsubout.txt&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
 Datele de intrare corespund restrictiilor impuse&lt;br /&gt;
 1&lt;br /&gt;
 0&lt;br /&gt;
 2&lt;br /&gt;
 0&lt;br /&gt;
== Exemplul 2 ==&lt;br /&gt;
; &amp;#039;&amp;#039;&amp;#039;countprimsubin.txt&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
 1002&lt;br /&gt;
 2 0 0&lt;br /&gt;
 3 0 0&lt;br /&gt;
 5 0 0&lt;br /&gt;
 7 0 0&lt;br /&gt;
 1000001 0 0&lt;br /&gt;
 2&lt;br /&gt;
 1&lt;br /&gt;
 5&lt;br /&gt;
; &amp;#039;&amp;#039;&amp;#039;countprimsubout.txt&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
 Datele de intrare nu corespund restrictiilor impuse&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
tree = []&lt;br /&gt;
prime_count = []&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def is_prime(n):&lt;br /&gt;
    if n &amp;lt; 2:&lt;br /&gt;
        return False&lt;br /&gt;
    if n == 2 or n == 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;
    w = 2&lt;br /&gt;
    while i * i &amp;lt;= n:&lt;br /&gt;
        if n % i == 0:&lt;br /&gt;
            return False&lt;br /&gt;
        i += w&lt;br /&gt;
        w = 6 - w&lt;br /&gt;
    return True&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def dfs(node):&lt;br /&gt;
    global tree, prime_count&lt;br /&gt;
    prime_count[node] = is_prime(tree[node][0])&lt;br /&gt;
    if tree[node][1] != 0:&lt;br /&gt;
        prime_count[node] += dfs(tree[node][1])&lt;br /&gt;
    if tree[node][2] != 0:&lt;br /&gt;
        prime_count[node] += dfs(tree[node][2])&lt;br /&gt;
    return prime_count[node]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
    global tree, prime_count&lt;br /&gt;
    with open(&amp;#039;countprimsubin.txt&amp;#039;, &amp;#039;r&amp;#039;) as fin, open(&amp;#039;countprimsubout.txt&amp;#039;, &amp;#039;w&amp;#039;) as fout:&lt;br /&gt;
        n = int(fin.readline().strip())&lt;br /&gt;
        tree = [[0, 0, 0] for _ in range(n+1)]&lt;br /&gt;
        prime_count = [0 for _ in range(n+1)]&lt;br /&gt;
        for i in range(1, n+1):&lt;br /&gt;
            x, st, dr = map(int, fin.readline().strip().split())&lt;br /&gt;
            tree[i] = [x, st, dr]&lt;br /&gt;
        k = int(fin.readline().strip())&lt;br /&gt;
        nodes = [int(fin.readline().strip()) for _ in range(k)]&lt;br /&gt;
        if n &amp;lt; 1 or n &amp;gt; 1000 or any(x &amp;lt; 1 or x &amp;gt; 1000000 for x, _, _ in tree[1:]) or k &amp;lt; 1 or k &amp;gt; 1000:&lt;br /&gt;
            fout.write(&amp;quot;Datele de intrare nu corespund restrictiilor impuse\n&amp;quot;)&lt;br /&gt;
            return&lt;br /&gt;
        fout.write(&amp;quot;Datele de intrare corespund restrictiilor impuse\n&amp;quot;)&lt;br /&gt;
        for node in nodes:&lt;br /&gt;
            fout.write(str(dfs(node)) + &amp;#039;\n&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    main()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Brianna Waltner</name></author>
	</entry>
</feed>