Skip to content

Instantly share code, notes, and snippets.

@marcoscastro
Last active February 1, 2017 04:22
Show Gist options
  • Save marcoscastro/ace8952cc5bf87646a28561e2d350f4a to your computer and use it in GitHub Desktop.
Save marcoscastro/ace8952cc5bf87646a28561e2d350f4a to your computer and use it in GitHub Desktop.
Problema URI 1582 - pitagoras e MDC
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
/*
Problema 1582
Endereço: https://www.urionlinejudge.com.br/judge/pt/problems/view/1582
Primeiro parágrafo é só blá blá blá, falando da história do teorema de
Pitágoras.
Ele fala que uma tripla pitagórica é quando existe um triângulo retângulo
que tenha x, y, z como lados. Um triângulo retângulo é aquele que possui um
ângulo reto e dois ângulos agudos complementares. Possui a hipotenusa que é
o lado maior e os dois catetos.
O teorema de pitágoras diz que a soma dos quadrados dos catetos é igual
à hipotenusa. Ou seja (3, 4, 5) é tripla pitagórica porque 5^2 = 4^2 + 3^2
=> 25 = 16 + 9 => 25 = 25
Mas ele fala também de uma tripla pitagórica primitiva, por exemplo:
(6, 8, 10) não é tripla pitagórica primitiva porque é apenas a tripla (3, 4, 5)
multiplicada por 2. Uma pitagórica primitiva é quando o mdc(x,y,z) = 1
O problema é simples: é só para dizer se a tripla é somente uma tripla ou é
tripla pitagorica ou é tripla pitagorica primitiva
*/
int main()
{
vector<int> v(3);
// obtém as entradas
while(cin >> v[0] >> v[1] >> v[2])
{
sort(v.begin(), v.end());
// verifica se é pitagórica
if(v[2] * v[2] == (v[0] * v[0] + v[1] * v[1]))
{
int mdc = 1, div;
for(div = 2; div <= v[0]; div++) // obtém o MDC
{
if((v[0] % div == 0) && (v[1] % div == 0) && (v[2] % div == 0))
mdc = div;
}
// se o mdc for 1, então é pitagorica primitiva
if(mdc == 1)
cout << "tripla pitagorica primitiva";
else
cout << "tripla pitagorica";
}
else
cout << "tripla";
cout << endl;
}
return 0;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment