import java.util.BitSet;
import java.util.Scanner;
/**
* 106 - Fermat vs. Pythagoras [http://uva.onlinejudge.org]
*
* @author BreakDark
* @version 3.0 beta
*/
// ACEPTADO!!! xD
public class Main {
public static void main(String[] args) {
Scanner Lee; // Para leer los datos de entrada
int N; // para el N a leer
// AQUI INICIA EL PROGRAMA!!!
Lee = new Scanner(System.in);
while(Lee.hasNext()){
N = Lee.nextInt();
calcula(N);
}
}
/**
* Procedimiento que realiza todo el trabajo
*
* @param N
* el numero a procesar
*/
private static void calcula(int N) {
int cont = 0;
int numUsados = 0;
int r, s, i, x, y, z;
BitSet numeros = new BitSet(N + 1);
for(r = 2; r * r <= N; r++)
for(s = 1; s < r && r * r + s * s <= N; s++){
x = r * r - s * s;
y = 2 * r * s;
z = r * r + s * s;
if(mcd(x, y) == 1){
cont++;
for(i = 1; z * i <= N; i++){
if(!numeros.get(x * i)){
numUsados++;
numeros.set(x * i);
}
// para y
if(!numeros.get(y * i)){
numUsados++;
numeros.set(y * i);
}
// para z
if(!numeros.get(z * i)){
numUsados++;
numeros.set(z * i);
}
}
}
}
System.out.println(cont + " " + (N - numUsados));
}
/**
* Funcion que encuentra el MCD de dos enteros basado en el slgoritmo de
* euclides
*
* @param a
* entero a evaluar el MCD
* @param b
* entero a evaluar el MCD
* @return el MCD de a y b
*/
private static int mcd(int a, int b) {
int r;
if(b > a){
r = a;
a = b;
b = r;
}
r = b;
while(b > 0){
r = a % b;
a = b;
b = r;
}
return a;
}
}
Blog dedicado a la publicación de artículos, programas propios, traducciones de Roms de Nes, super Nes y mas, y alguno que otro artículo sobre tecnologia.
Monday, January 22, 2018
Solución al problema: 106 - Fermat vs Pythagoras con Java
Para ver el link del problema Click aqui
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment