Rezolvare completă PbInfo #1773 Happy

Cerința

Lui Ionci ii place foarte mult matematica si informatica, asa ca s-a gandit sa creeze o operatie. Aceasta a numit-o "Happy", notata cu semnul . Operatia se aplica doar numerelor naturale si dau ca rezultat tot un numar natural, conform exemplelor de mai jos:

  • 2010 ☺ 2005 = 5
  • 78 ☺ 54 = 6
  • 999 ☺ 543 = 3
  • 4 ☺ 9 = 1
  • 5 ☺ 6 = 1
  • 32 ☺ 24 = 8
  • 10 ☺ 2 = 2

Profesorul de matematica, Vasy, i-a promis nota 10 pe invenție dacă pentru mai multe perechi de numere naturale veți determina cel mai mic număr rezultat cu număr par de divizori al operației Happy aplicată perechilor date și cel mai mare număr rezultat al operației Happy cu număr impar de divizori.

Date de intrare

Programul citește un număr natural N și N perechi de numere naturale a b.

Date de ieșire

Programul va afișa cel mai mic și cel mai mare rezultat obținut prin operația de mai sus, cu număr par, respectiv impar de divizori, separate printr-un spațiu. Dacă nu exista rezultate care au numărul de divizori par sau numărul de divizori impar, se va afișa mesajul NU EXISTA.

Restricții și precizări

  • 1 ≤ N ≤ 20
  • cele 2 * N numere citite vor fi nenule și mai mici decât 1.000.000.

Exemplu

Intrare

2
87 87
1 1

Ieșire

87 1

Explicație

  • rezultatul operației aplicate numerelor 87 și 87 este 87, iar numerelor 1 și 1 este 1. Numărul 87 are 4 divizori iar numărul 1 are 1 divizor. Deci 87 este cel mai mare număr cu număr de divizori par și 1 cel mai mic număr cu numărul de divizori impar.

Cum e corect?

cout < "As la info"; cout << "As la info"; cout >> "As la info";

Felicitări! Poți mai mult?

Avem sute de probleme pentru tine, fiecare cu explicații ușor de înțeles.

Greșit, dar nu-i bai!

Antrenează-te cu sutele de probleme pe care ți le-am pregătit. Îți explicăm fiecare problemă în parte.

Rezolvare

Iată rezolvarea de 100 de puncte pentru problema Happy :

#include <iostream>
using namespace std;
int ndiv(int ogl)
{
    int S=0;
    for (int i=1; i*i <=ogl; ++i)
    {
        if (ogl%i ==0)
        {
            S=S+1;
            if (i*i <ogl)
            S=S+ 1;
        }
    }
    if (S % 2 == 0) return 0;
    else return 1;
}
 int happy(int a, int b)
 {
  int cmmdc;
  int r,ca,cb;
    while (b != 0)
    {
        r = a % b;
        a = b;
        b = r;
    }
    return a;

 }
 int main()
 {
     int n, a, b, x, maxi = -1, mini = 1000005;
     cin >> n;
     for (int i = 1; i <= n; i++)
     {
         cin >> a >> b;
         x = happy(a, b);
         if (x > maxi && ndiv(x) == 1) maxi = x;
         if (x < mini && ndiv(x) == 0) mini = x;
     }
     if (mini == 1000005 || maxi == -1) cout << "NU EXISTA";
     else cout << mini << " " << maxi;
 }

Atenție

Enunțurile afișate pe această pagină aparțin exclusiv site-ului PbInfo. Astfel, pentru ștergerea conținutului, puteți să ne contactați la adresa Adresa de email.

Rezolvarea problemei #1773 Happy

Pe această pagină găsești rezolvarea de 100 de puncte pentru problema #1773 Happy de pe PbInfo.ro. Atenție: nu încurajăm copiatul codului! Totuși, credem cu tărie că analizarea unei soluții corecte este o metodă foarte ușoară de a învăța informatică, astfel că oferim sursele pentru peste 1500 de probleme de pe platforma PbInfo.ro.

Pentru rezolvări PbInfo de la peste 1500 de probleme, vă invităm să intrați pe site-ul nostru!