es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Programa en C para obtener los factores primos de un número entero: “`c #include void primeFactors(int n) { // Imprimir los factores primos while (n % 2 == 0) { printf(“%d “, 2); n = n / 2; } for (int i = 3; i * i <= n; i = i + 2) { while (n % i == 0) { printf("%d ", i); n = n / i; } } if (n > 2) printf(“%d “, n); } int main() { int num; printf(“Ingrese un número entero positivo: “); scanf(“%d”, &num); printf(“Los factores primos del número %d son: “, num); primeFactors(num); return 0; } “` Este programa en C obtiene los factores primos de un número entero positivo ingresado por el usuario. Imprime en pantalla los factores primos en orden ascendente.

#include <stdio.h>
#include <string.h>

int primefac(int n, int count)
{
    while (n > 2)
    {
        int i = 2;
        while (n % count == 0)
        {
            if (count % i == 0 && count == i)
            {
                printf("%d\n", count);
                n = n / count;
                primefac(n, 3);
            }
            else
            {
                i++;
            }
        }
        count++;
    }
}

int main()
{
    int n, i = 3, j = 2; // i para obtener factores primos, j para verificar si i es primo o no
                         // n toma la entrada
    scanf("%d", &n);

    while (n % 2 == 0)
    {
        printf("%d\n", 2); // imprime si el número tiene factores de 2;
        n = n / 2;        // se elimina el factor de n;
    }
    primefac(n, 3);
    return 0;
}

“`</string.h></stdio.h>

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Error en el código para obtener factores primos

    El código está diseñado para obtener los factores primos del número dado. Sin embargo, hay un error en el código que resulta en una repetición de la salida del último factor.

    El error está en la recursión llamada en el bucle while dentro de la función primefac. Cuando n es divisible por count, el código verifica si count es un número primo o no al iterar a través de i. Si se encuentra que count es un número primo, lo imprime y llama a la función primefac con n dividido por count.

    Sin embargo, después de esta llamada recursiva, el bucle continúa con el mismo valor de count, lo que resulta en la segunda aparición del mismo factor en la salida. Para solucionar esto, el bucle debería continuar con el siguiente valor de count.

    Aquí está la función primefac corregida:

    int primefac(int n, int count)
    {
        while (n > 2)
        {
            int i = 2;
            while (n % count == 0)
            {
                if (count % i == 0 && count == i)
                {
                    printf("%d\n", count);
                    n = n / count;
                    primefac(n, 2); // llamada recursiva corregida con count = 2
                    return 0; // salir de la función después de la llamada recursiva
                }
                else
                {
                    i++;
                }
            }
            count++; // solo aumentar count si no se encuentra ningún factor
        }
        return 0; // salir de la función cuando n <= 2
    }
    

    Con esta corrección, el código debería producir la salida correcta para cualquier entrada dada.

Comments are closed.