<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://www.algopedia.ro/wiki/index.php?action=history&amp;feed=atom&amp;title=Clasa_a_IX-a_lec%C8%9Bia_7</id>
	<title>Clasa a IX-a lecția 7 - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://www.algopedia.ro/wiki/index.php?action=history&amp;feed=atom&amp;title=Clasa_a_IX-a_lec%C8%9Bia_7"/>
	<link rel="alternate" type="text/html" href="https://www.algopedia.ro/wiki/index.php?title=Clasa_a_IX-a_lec%C8%9Bia_7&amp;action=history"/>
	<updated>2026-04-12T20:27:11Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.44.2</generator>
	<entry>
		<id>https://www.algopedia.ro/wiki/index.php?title=Clasa_a_IX-a_lec%C8%9Bia_7&amp;diff=18263&amp;oldid=prev</id>
		<title>Bella at 18:48, 21 November 2022</title>
		<link rel="alternate" type="text/html" href="https://www.algopedia.ro/wiki/index.php?title=Clasa_a_IX-a_lec%C8%9Bia_7&amp;diff=18263&amp;oldid=prev"/>
		<updated>2022-11-21T18:48:10Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&amp;#039;&amp;#039;&amp;#039;Note de curs: prof. Isabela Coman&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
=Lectie=&lt;br /&gt;
== Afisarea divizorilor unui numar in ordine crescatoare ==&lt;br /&gt;
Fie un numar n natural. Sa se afiseze divizorii acestuia in ordine crescatoare.&lt;br /&gt;
==== Varianta1 ====&lt;br /&gt;
Aceasta varianta propune verificarea tuturor numerelelor de la 1 la n si afisarea doar a celor ce divid numarul n.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Pseudocod&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
  intreg n, d&lt;br /&gt;
  citeste n&lt;br /&gt;
  d = 1&lt;br /&gt;
  cat_timp( d &amp;lt;= n )&lt;br /&gt;
    if( n % d == 0 )&lt;br /&gt;
      scrie d, &amp;quot; &amp;quot;&lt;br /&gt;
    d = d + 1;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;C&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
int main(){&lt;br /&gt;
  int n, d;&lt;br /&gt;
&lt;br /&gt;
  scanf(&amp;quot;%d&amp;quot;, &amp;amp;n);&lt;br /&gt;
&lt;br /&gt;
  d = 1;&lt;br /&gt;
  while( d &amp;lt;= n ){&lt;br /&gt;
    if( n % d == 0 )&lt;br /&gt;
      printf(&amp;quot;%d &amp;quot;, d);&lt;br /&gt;
    d = d + 1;&lt;br /&gt;
  }&lt;br /&gt;
  return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;C++&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
using namespace std;&lt;br /&gt;
int main(){&lt;br /&gt;
  int n, d;&lt;br /&gt;
&lt;br /&gt;
  cin &amp;gt;&amp;gt; n;&lt;br /&gt;
&lt;br /&gt;
  d = 1;&lt;br /&gt;
  while( d &amp;lt;= n ){&lt;br /&gt;
    if( n % d == 0 )&lt;br /&gt;
      cout &amp;lt;&amp;lt; d &amp;lt;&amp;lt; &amp;#039;\n&amp;#039;;&lt;br /&gt;
    d = d + 1;&lt;br /&gt;
  }&lt;br /&gt;
  return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Varianta2 optima ====&lt;br /&gt;
Stim ca toti divizorii unui numar de pana in radicalul sau au ca si divizor corespondent un divizor de dupa radical si anume, presupunand un d ca divizor de pana in radical, n/d este perechea sa de dupa radical.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Pseudocod&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
  intreg n, d&lt;br /&gt;
  citeste n&lt;br /&gt;
  d = 1&lt;br /&gt;
  cat_timp( d &amp;lt; sqrt( n ) )          //sqrt(n) se considera parte intreaga &lt;br /&gt;
    if( n mod d == 0 )&lt;br /&gt;
      scrie d, &amp;quot; &amp;quot;&lt;br /&gt;
    d = d + 1;&lt;br /&gt;
  d = sqrt( n )&lt;br /&gt;
  cat_timp( d &amp;gt;= 1 )          //sqrt(n) se considera parte intreaga &lt;br /&gt;
    if( n mod d == 0 )&lt;br /&gt;
      scrie n / d, &amp;quot; &amp;quot;&lt;br /&gt;
    d = d - 1;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
#include &amp;lt;math.h&amp;gt;&lt;br /&gt;
int main(){&lt;br /&gt;
  int n, d;&lt;br /&gt;
&lt;br /&gt;
  scanf(&amp;quot;%d&amp;quot;, &amp;amp;n);&lt;br /&gt;
  // afisam mai intai divizorii de pana in radical&lt;br /&gt;
  // vom parcurge deci sqrt(n) numere&lt;br /&gt;
  d = 1;&lt;br /&gt;
  while( d * d &amp;lt; n ){&lt;br /&gt;
    if( n % d == 0 )&lt;br /&gt;
      printf(&amp;quot;%d\n&amp;quot;, d);&lt;br /&gt;
    d = d + 1;&lt;br /&gt;
  }&lt;br /&gt;
  // afisam divizorii de dupa radical&lt;br /&gt;
  // parcurgem divizorii de pana in radical in ordine inversa&lt;br /&gt;
  // si afisam perechea fiecaruia de dupa radical&lt;br /&gt;
  // vom parcurge deci tot sqrt(n) numere&lt;br /&gt;
  d = sqrt (n);&lt;br /&gt;
  while( d &amp;gt;= 1 ){&lt;br /&gt;
    if( n % d == 0 )&lt;br /&gt;
      printf(&amp;quot;%d\n&amp;quot;, n/d);&lt;br /&gt;
    d = d - 1;&lt;br /&gt;
  }&lt;br /&gt;
  return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
#include &amp;lt;iostream&amp;gt;&lt;br /&gt;
#include &amp;lt;cmath&amp;gt;&lt;br /&gt;
using namespace std;&lt;br /&gt;
int main(){&lt;br /&gt;
  int n, d;&lt;br /&gt;
&lt;br /&gt;
  cin &amp;gt;&amp;gt; n;&lt;br /&gt;
  // afisam mai intai divizorii de pana in radical&lt;br /&gt;
  // vom parcurge deci sqrt(n) numere&lt;br /&gt;
  d = 1;&lt;br /&gt;
  while( d * d &amp;lt; n ){&lt;br /&gt;
    if( n % d == 0 )&lt;br /&gt;
      cout &amp;lt;&amp;lt; d &amp;lt;&amp;lt; &amp;#039;\n&amp;#039;;&lt;br /&gt;
    d = d + 1;&lt;br /&gt;
  }&lt;br /&gt;
  // afisam divizorii de dupa radical&lt;br /&gt;
  // parcurgem divizorii de pana in radical in ordine inversa&lt;br /&gt;
  // si afisam perechea fiecaruia de dupa radical&lt;br /&gt;
  // vom parcurge deci tot sqrt(n) numere&lt;br /&gt;
  d = sqrt (n);&lt;br /&gt;
  while( d &amp;gt;= 1 ){&lt;br /&gt;
    if( n % d == 0 )&lt;br /&gt;
      cout &amp;lt;&amp;lt; n / d &amp;lt;&amp;lt; &amp;#039;\n&amp;#039;;&lt;br /&gt;
    d = d - 1;&lt;br /&gt;
  }&lt;br /&gt;
  return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
// fara sqrt&lt;br /&gt;
#include &amp;lt;iostream&amp;gt;&lt;br /&gt;
&lt;br /&gt;
using namespace std;&lt;br /&gt;
int main(){&lt;br /&gt;
  int n, d;&lt;br /&gt;
&lt;br /&gt;
  cin &amp;gt;&amp;gt; n;&lt;br /&gt;
  // afisam mai intai divizorii de pana in radical&lt;br /&gt;
  // vom parcurge deci sqrt(n) numere&lt;br /&gt;
  d = 1;&lt;br /&gt;
  while( d * d &amp;lt; n ){&lt;br /&gt;
    if( n % d == 0 )&lt;br /&gt;
      cout &amp;lt;&amp;lt; d &amp;lt;&amp;lt; &amp;#039;\n&amp;#039;;&lt;br /&gt;
    d = d + 1;&lt;br /&gt;
  }&lt;br /&gt;
  // afisam divizorii de dupa radical&lt;br /&gt;
  // parcurgem divizorii de pana in radical in ordine inversa&lt;br /&gt;
  // si afisam perechea fiecaruia de dupa radical&lt;br /&gt;
  // vom parcurge deci tot sqrt(n) numere&lt;br /&gt;
  &lt;br /&gt;
  if ( d * d &amp;gt; n )   // daca am depasit radicalul, scadem 1 din d&lt;br /&gt;
    d --;&lt;br /&gt;
  while( d &amp;gt;= 1 ){&lt;br /&gt;
    if( n % d == 0 )&lt;br /&gt;
      cout &amp;lt;&amp;lt; n / d &amp;lt;&amp;lt; &amp;#039;\n&amp;#039;;&lt;br /&gt;
    d = d - 1;&lt;br /&gt;
  }&lt;br /&gt;
  return 0;&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Suma divizorilor unui numar ==&lt;br /&gt;
Varianta1:&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
int main() {&lt;br /&gt;
  int n, d, s;&lt;br /&gt;
  scanf( &amp;quot;%d&amp;quot;, &amp;amp;n );&lt;br /&gt;
  printf( &amp;quot;Divizorii lui %d sunt:&amp;quot;, n );&lt;br /&gt;
 &lt;br /&gt;
  s = 0;&lt;br /&gt;
  d = 1;&lt;br /&gt;
  while ( d &amp;lt;= n ) {&lt;br /&gt;
    if ( n % d == 0 )&lt;br /&gt;
      s = s + d;&lt;br /&gt;
    d = d + 1;&lt;br /&gt;
  }&lt;br /&gt;
  printf( &amp;quot;%d&amp;quot;, s );&lt;br /&gt;
  return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Varianta2 optimizat:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
int main(){&lt;br /&gt;
  long long n, s, d;&lt;br /&gt;
&lt;br /&gt;
  scanf(&amp;quot;%lld&amp;quot;, &amp;amp;n);&lt;br /&gt;
  s = 0;&lt;br /&gt;
  d = 1;&lt;br /&gt;
  while( d * d &amp;lt; n ){      // ne oprim cu d pana in radicalul numarului n&lt;br /&gt;
    if( n % d == 0 )&lt;br /&gt;
      s = s + d + n / d;   // adaugam la suma si pe d si perechea sa de dupa radical&lt;br /&gt;
    d = d + 1;    &lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  // aici d va fi fie egal cu radical din n daca n e patrat perfect, fie mai mare decat radical din n&lt;br /&gt;
&lt;br /&gt;
  if( d * d == n )         // daca n e patrat perfect, &lt;br /&gt;
    s = s + d;             // vom adauga radical din n doar o data la suma&lt;br /&gt;
  printf(&amp;quot;%lld\n&amp;quot;, s);&lt;br /&gt;
  return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Primalitate ==&lt;br /&gt;
Fie un numar n. Sa se afiseze mesajul &amp;quot;DA&amp;quot; daca numarul este prim si mesajul &amp;quot;NU&amp;quot; in caz contrar.&lt;br /&gt;
Rezolvare: Vom cauta un divizor al numarului n parcurgand toate numerele de la 2 pana la radical din n. Daca nu vom gasi nici un divizor, atunci numarul este prim.&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
int main() {&lt;br /&gt;
 int n, d;&lt;br /&gt;
 scanf( &amp;quot;%d&amp;quot;, &amp;amp;n );&lt;br /&gt;
 d = 2;&lt;br /&gt;
 while ( d * d &amp;lt;= n &amp;amp;&amp;amp; n % d &amp;gt; 0 )&lt;br /&gt;
   d = d + 1;&lt;br /&gt;
 if ( d * d &amp;gt; n &amp;amp;&amp;amp; n &amp;gt; 1 )&lt;br /&gt;
   printf( &amp;quot;DA&amp;quot; );&lt;br /&gt;
 else&lt;br /&gt;
   printf( &amp;quot;NU&amp;quot; );&lt;br /&gt;
 return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Divizori primi==&lt;br /&gt;
Sa se afiseze cati divizori primi are un număr n?&lt;br /&gt;
Tendinta multora cand e vorba de aceasta problema este de a pcuarcurge toti divizorii si de a-i verifica pe fiecare in parte daca este prim. Vom invata in lectia urmatoare cum descompunem in factori primi un numar.&lt;br /&gt;
&lt;br /&gt;
= Laborator = &lt;br /&gt;
==Divizorii unui numar==&lt;br /&gt;
==== [https://www.pbinfo.ro/?pagina=probleme&amp;amp;id=376 Suma Divizori] teorie====&lt;br /&gt;
==== [https://www.pbinfo.ro/?pagina=probleme&amp;amp;id=387 Suma divizori impari]====&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
int main(){&lt;br /&gt;
  long long n, s, d;&lt;br /&gt;
&lt;br /&gt;
  scanf(&amp;quot;%lld&amp;quot;, &amp;amp;n);&lt;br /&gt;
  s = 0;&lt;br /&gt;
  d = 1;&lt;br /&gt;
  while( d * d &amp;lt; n ){&lt;br /&gt;
    if( n % d == 0 ){&lt;br /&gt;
      if( d % 2 ){&lt;br /&gt;
        s = s + d; //printf(&amp;quot;%lld\n&amp;quot;, d);&lt;br /&gt;
      }&lt;br /&gt;
      if( n / d % 2 ){&lt;br /&gt;
        s = s + n / d; //printf(&amp;quot;%lld\n&amp;quot;, n/d);&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    d = d + 1;&lt;br /&gt;
  }&lt;br /&gt;
  if( d * d == n &amp;amp;&amp;amp; d % 2 )&lt;br /&gt;
    s = s + d;&lt;br /&gt;
  printf(&amp;quot;%lld\n&amp;quot;, s);&lt;br /&gt;
  return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====[https://www.pbinfo.ro/?pagina=probleme&amp;amp;id=388 Numarul divizorilor Pari]====&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
int main(){&lt;br /&gt;
  long long n, c, d;&lt;br /&gt;
&lt;br /&gt;
  scanf(&amp;quot;%lld&amp;quot;, &amp;amp;n);&lt;br /&gt;
  c = 0;&lt;br /&gt;
  d = 1;&lt;br /&gt;
  while( d * d &amp;lt; n ){&lt;br /&gt;
    if( n % d == 0 ){&lt;br /&gt;
      if( d % 2 == 0){&lt;br /&gt;
        c = c + 1; //printf(&amp;quot;%d\n&amp;quot;, d);&lt;br /&gt;
      }&lt;br /&gt;
      if( n / d % 2 == 0){&lt;br /&gt;
        c = c + 1; //printf(&amp;quot;%d\n&amp;quot;, n/d);&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    d = d + 1;&lt;br /&gt;
  }&lt;br /&gt;
  if( d * d == n &amp;amp;&amp;amp; d % 2 == 0 )&lt;br /&gt;
    c = c + 1;&lt;br /&gt;
  printf(&amp;quot;%lld\n&amp;quot;, c);&lt;br /&gt;
  return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
==== [https://www.pbinfo.ro/?pagina=probleme&amp;amp;id=61 AfisareDivizoriComuni]====&lt;br /&gt;
Să se scrie un program care afișează divizorii comuni ai două numere naturale citite de la tastatură.&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
#include &amp;lt;math.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
int main(){&lt;br /&gt;
  int a, b, d;&lt;br /&gt;
&lt;br /&gt;
  scanf( &amp;quot;%ld%d&amp;quot;, &amp;amp;a, &amp;amp;b );&lt;br /&gt;
  // pun in a valoarea cea mai mica dintre a si b&lt;br /&gt;
  if ( a &amp;gt; b ){&lt;br /&gt;
    d = a;&lt;br /&gt;
    a = b;&lt;br /&gt;
    b = d;&lt;br /&gt;
  }&lt;br /&gt;
  // parcurg toti divizorii d ai lui a de pana in radical&lt;br /&gt;
  // si ma intreb daca sunt si divizori ai lui b&lt;br /&gt;
  d = 1;&lt;br /&gt;
  while( d * d &amp;lt; a ){&lt;br /&gt;
    if ( a % d == 0 &amp;amp;&amp;amp; b % d == 0 )&lt;br /&gt;
        printf( &amp;quot;%d &amp;quot;, d ) ;&lt;br /&gt;
    d = d + 1;&lt;br /&gt;
  }&lt;br /&gt;
  // parcurg toti divizorii d ai lui a de pana in radical, &lt;br /&gt;
  // daca d e divizor al lui a si n/d e divizor al lui a&lt;br /&gt;
  // verific daca n/d este si divizori ai lui b&lt;br /&gt;
  d = sqrt ( a );&lt;br /&gt;
  while( d * d &amp;gt;= 1 ){&lt;br /&gt;
    if ( a % d == 0 &amp;amp;&amp;amp; b % ( a / d ) == 0 )&lt;br /&gt;
        printf( &amp;quot;%d &amp;quot;, a / d ) ;&lt;br /&gt;
    d = d - 1;&lt;br /&gt;
  }&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Laborator = &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== TEMA ==&lt;br /&gt;
=== Tema teorie ===&lt;br /&gt;
Usoare&lt;br /&gt;
* [https://www.pbinfo.ro/?pagina=probleme&amp;amp;id=408 Divizorii Oglinditului]&lt;br /&gt;
* [https://www.pbinfo.ro/?pagina=probleme&amp;amp;id=64 NumarPerfect]&lt;br /&gt;
* [https://www.pbinfo.ro/?pagina=probleme&amp;amp;id=445 PseudoPerfect]&lt;br /&gt;
* [https://www.pbinfo.ro/?pagina=probleme&amp;amp;id=373 nPrime]&lt;br /&gt;
* [https://www.pbinfo.ro/?pagina=detalii-evaluare&amp;amp;id=6301021 DivizoriPariInterval]&lt;br /&gt;
Medii&lt;br /&gt;
* [https://www.pbinfo.ro/?pagina=probleme&amp;amp;id=2745 intrebari] numarul de divizori&lt;br /&gt;
* [https://www.pbinfo.ro/?pagina=probleme&amp;amp;id=1574 Prietene] ( suma divizori )&lt;br /&gt;
* [https://www.pbinfo.ro/?pagina=probleme&amp;amp;id=245 NrDivMax]&lt;br /&gt;
* [https://www.pbinfo.ro/?pagina=probleme&amp;amp;id=380 aprim1]&lt;br /&gt;
* [https://www.pbinfo.ro/?pagina=probleme&amp;amp;id=381 aprim2]&lt;br /&gt;
* [https://www.pbinfo.ro/?pagina=probleme&amp;amp;id=374 nprime1]&lt;/div&gt;</summary>
		<author><name>Bella</name></author>
	</entry>
</feed>