Se dă un numar n și n perechi de numere naturale a și b.Să se determine dacă a/b este fracție finită sau periodică, iar dacă este fracție periodică să se determine dacă este fracție periodică simplă sau mixtă. Ma poate cineva ajuta cu o sursa in C++? Am incercat sa ma folosesc de numere prime ca sa il rezolv dar mereu obtin 20 de puncte.

https://www.pbinfo.ro/probleme/3307/fractie6


Răspuns :

Răspuns:

#include <iostream>

using namespace std;

int n,i,a,b,f2,f5;

int main()

{

   cin >> n;

   for (i=1; i<=n; i++)

   {

       cin >> a >> b;

       if (a%b==0) cout << "fractie finita";

       else

       {

           while (a%2==0 && b%2==0)

           {

               a/=2; b/=2;

           }

           while (a%5==0 && b%5==0)

           {

               a/=5; b/=5;

           }

           f2=0;

           while (b%2==0)

           {

               b/=2; ++f2;

           }

           f5=0;

           while (b%5==0)

           {

               b/=5; ++f5;

           }

           if (b==1)

           {

               cout << "fractie finita";

           }

           else

           {

               if (a%b==0) cout << "fractie finita";

               else

               {

                   if (f2==0 && f5==0) cout << "fractie periodica simpla";

                   else cout << "fractie periodica mixta";

               }

           }

       }

       cout << endl;

   }

}

Explicație:

e cod proaspăt de 100p.  

-am încercat din start dacă a se divide cu b atunci răspuns ”fr. finita”

- a urmat o simulare  a simplificărilor repetate a  fracției a/b prin 2, prin 5.

- dacă după aceste simplificări numitorul obținut este 1, atunci ”fr. finită”,

  altfel, căutăm (numărăm) dacă noul numitor are factori de 2 și/sau 5.