<?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=3090_-_divizori5</id>
	<title>3090 - divizori5 - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.universitas.ro/index.php?action=history&amp;feed=atom&amp;title=3090_-_divizori5"/>
	<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=3090_-_divizori5&amp;action=history"/>
	<updated>2026-05-01T04:47:09Z</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=3090_-_divizori5&amp;diff=10118&amp;oldid=prev</id>
		<title>Danciu: Pagină nouă: Fie &lt;code&gt;D&lt;/code&gt;, &lt;code&gt;K&lt;/code&gt; și &lt;code&gt;P&lt;/code&gt; trei numere naturale.  == Cerința == Să se determine numărul de numere naturale, notat cu &lt;code&gt;T&lt;/code&gt;, având următoarele proprietăți:  * au exact &lt;code&gt;D&lt;/code&gt; divizori; * descompunerea în factori primi a acestor numere conține exact &lt;code&gt;K&lt;/code&gt; numere prime; * toți factorii primi din descompunerea numerelor sunt mici sau egali cu &lt;code&gt;P&lt;/code&gt;.  == Date de intrare == Fișierul de intrare &lt;code&gt;divizori.i...</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=3090_-_divizori5&amp;diff=10118&amp;oldid=prev"/>
		<updated>2024-06-04T09:04:49Z</updated>

		<summary type="html">&lt;p&gt;Pagină nouă: Fie &amp;lt;code&amp;gt;D&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;K&amp;lt;/code&amp;gt; și &amp;lt;code&amp;gt;P&amp;lt;/code&amp;gt; trei numere naturale.  == Cerința == Să se determine numărul de numere naturale, notat cu &amp;lt;code&amp;gt;T&amp;lt;/code&amp;gt;, având următoarele proprietăți:  * au exact &amp;lt;code&amp;gt;D&amp;lt;/code&amp;gt; divizori; * descompunerea în factori primi a acestor numere conține exact &amp;lt;code&amp;gt;K&amp;lt;/code&amp;gt; numere prime; * toți factorii primi din descompunerea numerelor sunt mici sau egali cu &amp;lt;code&amp;gt;P&amp;lt;/code&amp;gt;.  == Date de intrare == Fișierul de intrare &amp;lt;code&amp;gt;divizori.i...&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;Fie &amp;lt;code&amp;gt;D&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;K&amp;lt;/code&amp;gt; și &amp;lt;code&amp;gt;P&amp;lt;/code&amp;gt; trei numere naturale.&lt;br /&gt;
&lt;br /&gt;
== Cerința ==&lt;br /&gt;
Să se determine numărul de numere naturale, notat cu &amp;lt;code&amp;gt;T&amp;lt;/code&amp;gt;, având următoarele proprietăți:&lt;br /&gt;
&lt;br /&gt;
* au exact &amp;lt;code&amp;gt;D&amp;lt;/code&amp;gt; divizori;&lt;br /&gt;
* descompunerea în factori primi a acestor numere conține exact &amp;lt;code&amp;gt;K&amp;lt;/code&amp;gt; numere prime;&lt;br /&gt;
* toți factorii primi din descompunerea numerelor sunt mici sau egali cu &amp;lt;code&amp;gt;P&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Fișierul de intrare &amp;lt;code&amp;gt;divizori.in&amp;lt;/code&amp;gt; conține pe primul rând numerele &amp;lt;code&amp;gt;D&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;K&amp;lt;/code&amp;gt; și &amp;lt;code&amp;gt;P&amp;lt;/code&amp;gt; cu semnificația de mai sus, despărțite prin câte un spațiu.&lt;br /&gt;
&lt;br /&gt;
== Date de iesire ==&lt;br /&gt;
Fișierul de ieșire &amp;lt;code&amp;gt;divizori.out&amp;lt;/code&amp;gt; va conține pe primul rând restul împărțirii numărului &amp;lt;code&amp;gt;T&amp;lt;/code&amp;gt; la &amp;lt;code&amp;gt;3000017&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Restricții și precizări ==&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;2 ≤ D ≤ 1014&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;1 ≤ K ≤ 100&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;2 ≤ P ≤ 1.000.000&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Exemplul 1: =&lt;br /&gt;
&amp;lt;code&amp;gt;divizori.in&amp;lt;/code&amp;gt;&lt;br /&gt;
 6 2 5&lt;br /&gt;
&amp;lt;code&amp;gt;divizori.out&amp;lt;/code&amp;gt;&lt;br /&gt;
 6&lt;br /&gt;
&lt;br /&gt;
=== Explicație ===&lt;br /&gt;
&amp;lt;code&amp;gt;D = 6&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;K = 2&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;P = 5&amp;lt;/code&amp;gt;. Sunt &amp;lt;code&amp;gt;T = 6&amp;lt;/code&amp;gt; numere cu exact &amp;lt;code&amp;gt;6&amp;lt;/code&amp;gt; divizori ce conțin în descompunerea în factori primi exact două numere prime mai mici sau egale decât &amp;lt;code&amp;gt;5&amp;lt;/code&amp;gt;: &amp;lt;code&amp;gt;2132&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;2152&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;2231&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;2251&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;3152&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;3251&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
= Exemplul 2: =&lt;br /&gt;
&amp;lt;code&amp;gt;divizori.in&amp;lt;/code&amp;gt;&lt;br /&gt;
 18 3 10&lt;br /&gt;
&amp;lt;code&amp;gt;divizori.out&amp;lt;/code&amp;gt;&lt;br /&gt;
 12&lt;br /&gt;
&lt;br /&gt;
= Exemplul 3: =&lt;br /&gt;
&amp;lt;code&amp;gt;divizori.in&amp;lt;/code&amp;gt;&lt;br /&gt;
 10 8 17&lt;br /&gt;
&amp;lt;code&amp;gt;divizori.out&amp;lt;/code&amp;gt;&lt;br /&gt;
 0&lt;br /&gt;
&lt;br /&gt;
=== Explicație ===&lt;br /&gt;
&amp;lt;code&amp;gt;D = 10&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;K = 8&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;P = 17&amp;lt;/code&amp;gt;. Nu există numere cu exact &amp;lt;code&amp;gt;10&amp;lt;/code&amp;gt; divizori ce conțin în descompunerea în factori primi exact &amp;lt;code&amp;gt;8&amp;lt;/code&amp;gt; numere prime mai mici sau egale cu &amp;lt;code&amp;gt;17&amp;lt;/code&amp;gt; deoarece sunt doar &amp;lt;code&amp;gt;7&amp;lt;/code&amp;gt; numere prime mai mici sau egale decât &amp;lt;code&amp;gt;17&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python3&amp;quot;&amp;gt;&lt;br /&gt;
MOD = 3000017  &lt;br /&gt;
&lt;br /&gt;
def count_numbers_with_properties(d, k, p):&lt;br /&gt;
    dp = [[0 for _ in range(k + 1)] for _ in range(d + 1)]&lt;br /&gt;
&lt;br /&gt;
    for i in range(k + 1):&lt;br /&gt;
        for j in range(1, d + 1):&lt;br /&gt;
            if j == 1:&lt;br /&gt;
                dp[j][i] = 1&lt;br /&gt;
&lt;br /&gt;
    for i in range(2, d + 1):&lt;br /&gt;
        for j in range(1, k + 1):&lt;br /&gt;
            dp[i][j] = 0&lt;br /&gt;
&lt;br /&gt;
            for num_divisors in range(1, i):&lt;br /&gt;
                if j &amp;gt;= 2:&lt;br /&gt;
                    dp[i][j] += dp[num_divisors][j - 1] * dp[i - num_divisors][j]&lt;br /&gt;
                else:&lt;br /&gt;
                    # If j = 1, all prime factors must be distinct&lt;br /&gt;
                    if num_divisors == 1:&lt;br /&gt;
                        dp[i][j] += dp[num_divisors][j]&lt;br /&gt;
&lt;br /&gt;
    total_numbers = 0&lt;br /&gt;
    for i in range(1, d + 1):&lt;br /&gt;
        for j in range(1, k + 1):&lt;br /&gt;
            # Limit prime factors to &amp;#039;p&amp;#039;&lt;br /&gt;
            if max_prime_factor_up_to_p(dp[i][j], p) == dp[i][j]:&lt;br /&gt;
                total_numbers += dp[i][j]&lt;br /&gt;
&lt;br /&gt;
    return total_numbers % MOD&lt;br /&gt;
&lt;br /&gt;
def max_prime_factor_up_to_p(n, p):&lt;br /&gt;
    max_prime_factor = 1&lt;br /&gt;
    while n % 2 == 0:&lt;br /&gt;
        n //= 2&lt;br /&gt;
        max_prime_factor = 2&lt;br /&gt;
&lt;br /&gt;
    for i in range(3, int(p ** 0.5) + 1, 2):&lt;br /&gt;
        while n % i == 0:&lt;br /&gt;
            n //= i&lt;br /&gt;
            max_prime_factor = i&lt;br /&gt;
&lt;br /&gt;
    if n &amp;gt; 1:&lt;br /&gt;
        max_prime_factor = n&lt;br /&gt;
&lt;br /&gt;
    return max_prime_factor&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
    with open(&amp;quot;divizori.in&amp;quot;, &amp;quot;r&amp;quot;) as input_file:&lt;br /&gt;
        d, k, p = map(int, input_file.readline().split())&lt;br /&gt;
&lt;br /&gt;
    number_count = count_numbers_with_properties(d, k, p)&lt;br /&gt;
&lt;br /&gt;
    with open(&amp;quot;divizori.out&amp;quot;, &amp;quot;w&amp;quot;) as output_file:&lt;br /&gt;
        output_file.write(str(number_count))&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>Danciu</name></author>
	</entry>
</feed>