Programa que muestre los numeros OMIRP

Iniciado por nigarcia, 17 Julio 2011, 03:57 AM

0 Miembros y 1 Visitante están viendo este tema.

nigarcia

Necesito crear un programa en C o en Java que muestre los numeros OMIRP que son los numeros primos reversibles, como por ejemplo el 7 y el 17...

Es urgente y agradeceria cualquier ayuda posible.

GRACIAS!!!

ralymontes

Hola:

Aqui nadie le ahce la tarea a nadie, lee las reglas.

Intentalo tú y presenta tu avance y ya vemos en qué andas bien y en qué andas mal.

Saludos, raly.

Valkyr

Yo en java lo realicé y no era muy complicado. En el caso que yo lo hice de primeras te decía un número y entonces te pedía decir cuantos había hasta llegar a ese número.

Hazte una función que te compruebe si un número es OMIRP y para no tener que hacer la comprobación dos veces (es decir, sí un número es OMIRP su reverso también lo es, por tanto cuando llegues al reverso tendrías que volver a comprobar sí es) lleva un array de booleanos por ejemplo. Sí un número es OMIRP marcas a true su posición y la de su reverso. A la hora de comprobar si un número es OMIRP primero miras en dicho array, si está a true no haces nada, si está a false compruebas si lo es.

Saludos y ya sabes, hazlo tu que aquí no se escriben los códigos a los demás.

_niu

va contra las reglas hacerle el ejercicio a alguien?  :P ... yo tambien toy aprendiendo el c++ asique espero que te funque.
Si lo queres en java es casi igual, en ves de bool usas boolean, y en salida System.out.println("lo que queres q imprima"); sacas el include y el using namespace. jejejejeje
Los sabios diran si estoy errado.

Espero que leas lo que hice almenos  >:D ....
Código (cpp) [Seleccionar]

//============================================================================
// Necesito crear un programa en C o en Java que muestre los numeros OMIRP que
// son los numeros primos reversibles,como por ejemplo el 7 y el 17...
//============================================================================

//by niu

#include <iostream>
using namespace std; //Para usar los cout y cin

bool omirp (int numero) {
if (numero==2 || numero==3 || (numero%2!=0 && numero%3!=0)){ //Si el numero no es par ni impar... supongo q esto es omirp
if (numero>9){
unsigned short int m_numero [1]; // Considero hasta 99, o como los doy vulta?
/* ejemplo, de lo que sigue... tengo un numero 17
* m_numero[0]=7
* m_numero[1]=1
* numero=70+1  // 7*10+1
*/
m_numero[0]=numero%10;
m_numero[1]=(numero-m_numero[0])/10;
numero=m_numero[0]*10+m_numero[1];
}
return true;
}else return false;

}

int main (){
for (int i=0;i<101;i++){
if (omirp(i))cout<<i<<" ";
}
return 0;
}


mmm nada q decir, saludos gente.
std::cout<<Mi wiki personal<<"Nada es inalcanzable\n";

pucheto

Por rompebolas nomas, "//Si el numero no es par ni impar... supongo q esto es omirp" si pasa esto, en los enteros, ese numero no existe...

Ademas... si no es divisible por 2, y no es divisible por 3, puede ser divisible por 5 y no ser primo, entonces no ser OMIRP.

leogtz

#5
Yo haría primero una pequeña comprobación para ver si n es par, si es par retorno 0, inmediatamente. Pero primero hay que hacer una función para comprobar si n es primo, si es primo proceder con la siguiente comprobación.

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int is_prime(double v)
{
   if(v == 1)
   return 0;
   double i;

   for(i = (unsigned) sqrt(v); i > 1; i--)
       if(!fmod(v, i)) return 0;

    return 1;
}

int isomirp(int n)
{
    if(is_prime(n) == 0)
    return 0;

    char *p = NULL;
    unsigned i = 0;
    for(; n > 0; p = realloc(p, ++i), p[i - 1] = (n % 10) + 48, n /= 10);
    if(is_prime(atoi(p)))
    {
        free(p);
        return 1;
    }
    else
    {
        free(p);
        return 0;
    }
}

int main(void)
{
   unsigned i;
   for(i = 1; i <= 10000; i++)
   if(isomirp(i))
   printf("%d\n", i);

return EXIT_SUCCESS;
}
Código (perl) [Seleccionar]

(( 1 / 0 )) &> /dev/null || {
echo -e "stderrrrrrrrrrrrrrrrrrr";
}

http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com

_niu

Cita de: pucheto en 17 Julio 2011, 15:55 PM
Por rompebolas nomas, "//Si el numero no es par ni impar... supongo q esto es omirp" si pasa esto, en los enteros, ese numero no existe...

Ademas... si no es divisible por 2, y no es divisible por 3, puede ser divisible por 5 y no ser primo, entonces no ser OMIRP.

jajajaja.... me adueñe del ejercicio ahora. Entonces no tiene q ser divisible por 2 ni por 3, ni por 5,  y ya ta? Ahora me fijo en la wiki como se determina bien si es o no omirp

Tenes razon el comentario ese que hice... jajajaja la flashee

std::cout<<Mi wiki personal<<"Nada es inalcanzable\n";

pucheto

Cita de: brkpnt en 17 Julio 2011, 18:58 PM
jajajaja.... me adueñe del ejercicio ahora. Entonces no tiene q ser divisible por 2 ni por 3, ni por 5,  y ya ta? Ahora me fijo en la wiki como se determina bien si es o no omirp

Tenes razon el comentario ese que hice... jajajaja la flashee
Un numero primo es un numero que es divisible por 1 y por si mismo...

sauce19

hola! yo tambien necesito mostrar los numeros omirp en c++, esto es lo q tngo hasta ahora, si alguien sabe q m hac falta o q stoy haciendo mal, seria de mucha ayuda ...

#include<conio.h>
#include<stdio.h>
void  main(){
clrscr();
int c,omirp;
int i=0; /*un contador para los numeros encontrados*/
int n=2; /*numeros primos*/
int q=1; /*numeros por los que se divide n*/
printf("escribir la cantidad de numeros primos q quieres ver:");
scanf("%d",&c);
printf("\n\n");

while (i<c){ /*cantidad de numeros a imprimir*/
if (n>=q){
q++;
if (((n%q)==0)&&(n!=q)){ /*esto es si no es primo*/
n++;
q=1;}
if(((n%q)==0) && (n==q)){ /*este es si es primo*/
printf("%d,", n);
n++;
i++;
q=1;
}}

else n++;}

printf("\n");
printf("los numeros omirp son:\n");
if((n=='13')||(n=='17')||(n=='37')||(n=='79')){
printf("%d",n);
}


getche();}

PiroskY

hace una funcion que reciba un numero y devuelva un bool dependiendo si es primo o no
dalo vuelta y volveselo a dar a esa funcion, si las dos veces dio true es porque es omirp