👤

Salut! Imi poate spune cineva de ce codul urmator imi da doar 90 de puncte pe pbinfo? Problema este #61, afisare divizori comuni
#include

using namespace std;

int main()
{
int a,b,i;
cin>>a>>b;
if(a>b)
{for(i=1;i<=a;i++)
{
if((a%i==0) && (b%i==0))
cout< }}
else
{
for(i=1;i<=b;i++)
{
if((b%i==0) && (a%i==0))
cout< }
}

}
Daca nu apar toate semnele, este vina site-ului Brainly


Răspuns :

Răspuns:

#include <iostream>

using namespace std;

int v[500];

int main()

{

   int a, b, t, len=0 ;

   cin >> a >> b;

   if (a>b) { t=a; a=b; b=t; }

   for (t=1; t*t<a; ++t)

   {

       if (a%t==0)

       {

          if  (b%t==0) {  cout << t << " ";

                         if (b%(a/t)==0) { ++len; v[len]=a/t; } }

          else if (b%(a/t)==0) { ++len; v[len]=a/t; }

       }

   }

   if (t*t==a && b%t==0) cout << t << " ";

   for (t=len; t>=1; --t) cout << v[t] << " ";

   cout << endl;

   return 0;

}

Explicație:

Pentru 24 36, divizorii comuni sunt 1 2 3 4 6 12

Algoritmul dat ii gaseste eficient in ordinea 1 12 2 6 3 4

deoarece afisarea este in crestere, prima jumatate de divizori se afiseaza direct, 1 2 3, iar a doua jumatate se memorizeaza intr/un vector, 12 6 4

Vecorul apoi e afisat in ordinea inversa 4 6 12

Astfel obtinem 1 2 3 4 6 12