Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: shanse en 14 Noviembre 2018, 13:18 pm



Título: Ayuda c++
Publicado por: shanse en 14 Noviembre 2018, 13:18 pm
Definiremos número primo absoluto a un número primo que las sucesivas sumas de sus dígitos (hasta llegar a un número de un solo dígito) también son números primos. ejemplo:

29 es un número primo
La suma de sus dígitos 2 + 9 = 11 también es un número primo
La suma de los dígitos de 11 1 + 1 = 2 también es un número primo
Por lo tanto, 29 es un número primo absoluto.
Evidentemente los números primos de una sola cifra son todos primeros absolutos.

Queremos el listado secuencial de todos los números primos absolutos entre 2 y el <max> indicado.

INPUT: El máximo valor a testear <max>> 2.

OUTPUT: Secuencia del listado de números primos absolutos.

EJEMPLO:
PRIMEROS ABSOLUTOS
INTRODUCE UN MÁXIMO [> 2]: 100
2 3 5 7 11 23 29 41 43 47 61 83


Título: Re: Ayuda c++
Publicado por: prof neurus en 1 Abril 2019, 20:38 pm
#include <iostream>

using namespace std;

bool isPair (int number) {
    return (number % 2 == 0 ? true : false );
}

bool isOdd (int number) {
    return !isPair(number);
}

bool isPrimeNumber (int number) {
    if (number == 2)
        return true;
       
    if (isOdd(number)) {
        for (int i = 3; i < number; i++) {
            if (number % i == 0)
                return false;
        }
        return true;
    }
    else {
        return false;
    }
}

int numberOfDigits (int number) {
    if (number >= 100 && number < 1000)
        return 3;
    if (number >= 10 && number < 100)
        return 2;
    else
        return 1;
}

int sumOfDigits(const int number) {
    int hundred = 0;
    int ten = 0;
    int unity = 0;
   
    if (numberOfDigits(number) > 3) {
        hundred = number / 100;
        ten = (number % 100) / 10;
    }
    else {
        ten = number / 10;
    }
    unity = number % 10;
   
    return (hundred + ten + unity);
}

void minorPrimeNumbersThat (const int NUMBER, int arrayOfPrimeNumbers[]) {
    int index = 0;
    int sum = 0;
   
    for (int i = 2; i <= NUMBER; i++) {
        if (isPrimeNumber(i)) {
            if (numberOfDigits(i) == 1) {
                arrayOfPrimeNumbers[index++] = i;
            }
            else {
                sum = sumOfDigits(i);
                if (isPrimeNumber(sum)) {
                    if (numberOfDigits(sum) == 1) {
                        arrayOfPrimeNumbers[index++] = i;
                    }
                    else {
                        sum = sumOfDigits(sum);
                        if (isPrimeNumber(sum)) {
                            if (numberOfDigits(sum) == 1)
                                arrayOfPrimeNumbers[index++] = i;
                        }
                    }
                }
            }
        }
    }
}

void printNumbers ( int array[], const int LENGTH_ARRAY) {
    for (int i = 0; i < LENGTH_ARRAY; i++)
        cout << array << ", ";
}

int main()
{
    const int NUMBER = 100;
    const int LENGTH_ARRAY = 25;
   
    int arrayOfPrimeNumbers[LENGTH_ARRAY] = {0};
   
    cout << "Absolute Prime Numbers : ";
    printNumbers (arrayOfPrimeNumbers, LENGTH_ARRAY);
    cout << endl;
   
    minorPrimeNumbersThat (NUMBER, arrayOfPrimeNumbers);

    printNumbers (arrayOfPrimeNumbers, LENGTH_ARRAY);
   
    return 0;
}

Tiene sus limitaciones. Espero que te sirva. Saludos