Título: Necesito una ayuda Publicado por: jonyayala95 en 3 Febrero 2013, 23:50 pm Hola amigos, necesito me ayuden con un problema que estoy tratando de resolver pero que no sale.
El problema dice: Se dan dos numeros enteros positivos N y M, el problema es hallar la cantidad de pares de numeros enteros (a,b) con 1<=a<=N y 1<=b<=M y tal que (sqrt(a)+sqrt(b))^2 sea un numero enteroentero. (sqrt(n) es la raiz cuadrada de n). Por ejemplo si N=2 y M=2 la respuesta es 2 (a,b)=(1,1) y (2,2). Se entiende no? Pongo lo que hice yo: Es claro que para que (a,b) cumpla las condiciones sqrt(a*b) tiene que ser entero. (DEMOSTRACION: (sqrt(a)+sqrt(b))^2=(a+2*sqrt(a*b)+b) entonces como a y b son enteros 2*sqrt(a*b) tiene que ser entero, pero a*b es producto de dos enteros entonces para que toda la expresion sea entera (a*b) tiene que ser un cuadrado perfecto que en consecuencia sqrt(a*b) sea entero ). Entonces me armo algo que pruebe todas las multiplicaciones posibles que son en total (M*N) y se fije en cada caso si tiene raiz cuadrada exacta, si lo es que incremente en 1 la cantidad de pares. Pongo mi code, pero no se que estoy haciendo mal: Código
Agradeceria que me ayuden.. Nota: N y M son a lo sumo 77777 EDIT: Agregué la demostracion de por que si sqrt(a*b) es entero implica que el par (a,b) cumple lo pedido. Título: Re: Necesito una ayuda Publicado por: dooque en 4 Febrero 2013, 00:56 am Buenas!
Primero. No analice la parte matematica, i.e. No me que claro que sqrt(a*b) entero implique (sqrt(a)+sqrt(b))^2 entero. Segundo. Asumiendo que lo de arriba es true, lo que tenes mal es que el codigo: double raizab=sqrt(producto); if(raizab*raizab==producto){ respuesta++; } Tiene que estar dentro del for(). Saludos. (Disculpa la desproligidad, escribo desde un celular :p) Título: Re: Necesito una ayuda Publicado por: avesudra en 4 Febrero 2013, 01:07 am Código: sqrt(a) * sqrt (b) = sqrt(a * b) Código
Título: Re: Necesito una ayuda Publicado por: jonyayala95 en 4 Febrero 2013, 01:17 am No pero fijate que alcanza con que a*b sea un cuadrado perfecto (porque a y b son enteros, no sucederia lo mismo si a y b fuesen racionales), lo explico en la demostracion...
Título: Re: Necesito una ayuda Publicado por: dooque en 4 Febrero 2013, 01:19 am Si, tenes razon, como a y b son enteros basta con que sqrt(a*b) sea entero, lo que tenes mas es el codigo afuera del for, tiene que estar adentro!
Título: Re: Necesito una ayuda Publicado por: avesudra en 4 Febrero 2013, 01:25 am Si tienes razón es verdad, de todas maneras el código que he puesto en el post de arriba me parece que funciona.
¡Un saludo! Título: Re: Necesito una ayuda Publicado por: jonyayala95 en 4 Febrero 2013, 01:41 am Gracias por sus respuestas, pero no sé que parte de tu code está mal porque al correr el programa me tira algunos pares donde A o B son 0. Probé inicializando las variables en 1 pero tampoco funciona :)
Estamos mas cerca de la solucion... Título: Re: Necesito una ayuda Publicado por: naderST en 4 Febrero 2013, 01:49 am Si entendí bien, creo que lo siguiente debería funcionar:
Código
EDIT: Código
Título: Re: Necesito una ayuda Publicado por: jonyayala95 en 4 Febrero 2013, 03:02 am Si entendí bien, creo que lo siguiente debería funcionar: Algo está mal, porque no arroja bien el resultado.Por fin me salió a mi, paso mi code por si alguien puede optimizarlo: Código
Muchas gracias por sus respuestas! Título: Re: Necesito una ayuda Publicado por: naderST en 4 Febrero 2013, 03:05 am EDIT:
No me queda claro lo de la condición |