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ât1.000.000
.
Exemplu
Intrare
2 87 87 1 1
Ieșire
87 1
Explicație
- rezultatul operației aplicate numerelor
87
și87
este87
, iar numerelor1
și1
este1
. Numărul87
are4
divizori iar numărul1
are1
divizor. Deci87
este cel mai mare număr cu număr de divizori par și1
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 .
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!