Necesito ayuda por favor.
Este programa no me da ningún número primo en el array después de ejecutarlo. Este es un programa que toma una matriz 2D [n x m] y calcula cuántos números primos hay en la matriz 2D.
int isprime(int n)
{
int k;
if (n <= 1)
return 0;
for (k = 2; k <= (n / 2); k++){
if (n % k == 0)
return 0;
}
return 1;
}
}
int primecount(int x, int y, int a[x][y]){
int r, c, count = 0;
for(r = 0; r < x; r++) {
for(c = 0; c < y; c++) {
if(isprime(a[r][c]))
{
count++;
}
}
}
return count;
}
int main()
{
int n, m, i, j, z;
printf("Ingrese el número de filas: ");
scanf("%d", &n);
printf("\n");
printf("Ingrese el número de columnas: ");
scanf("%d", &m);
printf("\n");
int a[n][m];
printf("Ingrese los elementos de la matriz: \n");
for(i = 0; i < n; i++)
{
for(j = 0; j < m; j++)
scanf("%d", &a[i][j]);
}
z = primecount(n, m, a[n][m]);
printf("\n");
printf("El número de números primos en la matriz es: %d", z);
printf("\n");
return 0;
}
davy.ai
Pregunta
¿Cuál es el problema con este programa y cómo se puede resolver?
Respuesta
El problema con este programa es que en la función
primecount
, el parámetroa
debe pasarse como un puntero a una matriz 2D (int (*a)[y]
) en lugar de un solo entero (int a[x][y]
).La función
primecount
corregida se vería así:Además, la función
isprime
se puede simplificar iterando solo hasta la raíz cuadrada den
en lugar de la mitad den
. Entonces la funciónisprime
corregida sería:Al hacer estos cambios, el programa debería contar correctamente el número de números primos en la matriz 2D.