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

Subprogramul Max Imp are doi parametri, a si b. prin care primeşte câte un număr natural
(2Sa<b400). Subprogramul returneaza cel mai mare numar natural din intervalul (a, b) pentru
care produsul divizorilor săi impari pozitivi este strict mai mare decât el însuşi sau 0. dacă nu există
niciun astfel de număr. Scrieti definiția completă a subprogramului
Exemplu: daca a=14 si b=19, atunci subprogramul returnează 18 (1.3.9=27>18)​


whow: in interval e 2<=a
boiustef: problema nu e de pe pbinfo?
whow: nu, am avut test la info din ea

Răspunsuri la întrebare

Răspuns de boiustef
1

Răspuns:

#include <iostream>

using namespace std;

int a,b;

int MaxImp(int a, int b)

{

   int p, d, num,gasit=0;

   for (num=b; num>=a; num--)

   {

       p=1;

       for (d=1; d*d<num; d++)

       {

           if (num%d==0)

           {

               if (d%2==1) p*=d;

               if ((num/d)%d==1) p*=num/d;

           }

       }

       if (d*d==num)

       {

           if (d%2==1) p*=d;

       }

       if (p>num)

       {

           gasit=1; break;

       }

   }

   if (gasit) return num;

   else return 0;

}

int main()

{

   cin >> a >> b;

   cout << MaxImp(a,b);

   return 0;

}

Explicație:


whow: la if(p>nr) nu merge mai rapid sa pun return nr?
boiustef: da, dar asa m-am deprins sa fac return la iesire din blocul subprogramului... :)))
La o adica nu e cu mult mai rapid, deoarece break ne arunca din bucla for...
whow: am inteles
whow: ms
Alte întrebări interesante