Ayuda c++

Iniciado por shanse, 14 Noviembre 2018, 13:18 PM

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

shanse

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

prof neurus

#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
<Desde las primeras computadoras siempre hubo fantasmas en la máquina. Segmentos aleatorios de código que se agrupan para formar protocolos inesperados. Podría llamarse conducta. Radicales libres que engendran interrogantes de libre albedrío creatividad y hasta la naturaleza de lo que podría ser un alma./>