Informatică, întrebare adresată de togoeradu, 8 ani în urmă

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


boiustef: la testul ce nu trece, ce scrie?
boiustef: tr. sa-l pacalesti... pe site.. :)))
La comentarii daca scrii cod si folosesti semnul < , atunci tr. sa-l separi de caracterele vecine prin spatiu si nu va trunchia codul...
togoeradu: cout<
togoeradu: cout << i
boiustef: :)) s-a primit...
boiustef: cred, ai depasire de timp la testul 5...
boiustef: tr sa gasesti o metoda mai eficienta (rapida) de a gasi toti divizorii comuni
boiustef: for(i=1;i <=a;i++)
asa nu merge...
boiustef: nici asa nu e destul de eficient
for(i=1; i<=a/2; i++)

Răspunsuri la întrebare

Răspuns de boiustef
0

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

Alte întrebări interesante