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