Informatică, întrebare adresată de pmarian98, 9 ani în urmă

#2670 ecuatie4



Ecuație4

Se dau două numere naturale nenule, a și b, unde a < b. Să se determine soluțiile naturale nenule x și y ale ecuației: 1/x+1/y=a/b.


Date de intrare


Programul citește de la tastatură numerele naturale nenule a şi b.


Date de ieșire


Programul va afișa pe ecran, pe linii separate, soluţiile ecuaţiei separate printr-un spațiu, în ordinea crescătoare a valorilor lui x, iar în cazul valorilor egale ale lui x, în ordinea crescătoare a valorilor lui y.


Restricții și precizări


1 ≤ a < b ≤ 100;


Exemplu

Intrare


2 3

Iesire


2 6

3 3


Intrare


1 10


Iesire


11 110

12 60

14 35

15 30

20 20


am incercat cu algoritm de cmmdc si sa determin fractia minima


#include

using namespace std;

//cmmdc algoritmul lui Euclid 2

int cmmdc(int x, int y)

{

long long r=0;

r=x%y;

while(r)

{

x=y;

y=r;

r=x%y;


}

return y;



boiustef: am luat 70 cu 3 depasiri de timp
pmarian98: Astept oricand si alte idei

Răspunsuri la întrebare

Răspuns de boiustef
3

#include <iostream>

using namespace std;

int a, b, x, y, c;

int main()

{

   cin >> a >> b;

   c=(a+b)*b;

   for (x=1; x<=c; ++x)

   {

       for (y=c; y>0; --y)

       {

           if (x+y<x*y)

           {

              if (a*x*y==b*(x+y) && x<=y)

                cout << x << " " << y << "\n";

              if (x>y) {break;}

           }

       }

   }

   return 0;

}


Razzvy: Rectific: in loc de a / b este b / a
Razzvy: Prin urmare, ne ramane de analizat functia pentru care x > b/a
Razzvy: Imaginea functiei pe intervalul (b/a, infinit) este tot (b/a, infinit), numai ca functia este descrescatoare, asa ca cu cat x este mai mare, cu atat y scade si se apropie de b/a
Razzvy: Stim ca y este natural, asa ca ultima valoare pe care o va lua y va fi cel mai mic numar natural mai mare decat b/a. Vom nota cu t aceasta valoare. Se observa ca t = floor(b/a + 1), unde floor(z) este partea intreaga a lui z.
Razzvy: Deci valoarea minima a lui y este t. In cazul acesta, putem afla valoarea maxima a lui x. x in functie de y este: x = by / (ay - b)
Razzvy: Il inlocuim pe y cu t in ecuatia de mai devreme
Razzvy: max(x) = bt / (at - b) . Mai mult de atat nu am ce sa fac.
Razzvy: Final: max(x) = b * floor(b/a + 1) / (a * floor(b/a + 1) - b)
boiustef: mersi mult !! voi analiza maine... deacum e tarziu... nb
Razzvy: Apropo, am folosit desmos ca sa am a vizualizare mai buna a functiei. E un site folositor pe care poti vedea graficele functiilor.
Alte întrebări interesante