El programa se bloquea cuando `if(variable% 2== 0)`
crash undefined-behavior (2)
Usted está dividiendo por cero cuando number = 0;
138816 % number
implica división y un resto.
Estoy escribiendo un programa que encuentra números perfectos . Después de leer acerca de estos números perfectos, encontré una lista de ellos: Lista de números perfectos . Por el momento, la salida es:
28 // perfect
496 // perfect
8128 // perfect
130816 // not perfect
2096128 // not perfect
33550336 // perfect
Decidí crear un conjunto y ponerlo con números, que dividen el número totalmente (sin el resto). Entonces podré verificar si es un número perfecto o no al agregar todos los elementos de la matriz. Pero la aplicación se bloquea y no puedo entender por qué:
#include <stdio.h>
#include <stdlib.h>
int main()
{
unsigned long number;
unsigned long arr2[100] = {0};
int k = 0;
for ( number = 0; number <= 130816; number++ )
if ( 130816 % number == 0 )
arr2[k++] = number;
for ( k = 0; k < 100; k++ )
printf("%lu", arr2[k]);
return 0;
}
Usted está haciendo módulo zero
aquí:
if ( 130816 % number == 0 )
que es un comportamiento indefinido Si inicia su bucle for en 1
en su lugar, debería solucionar ese problema. Sin embargo, dado que N % 1 == 0
para todos los N
, probablemente deba comenzar en 2
.
Del estándar C99
, 6.5.5 /5
(sin cambios en C11
):
El resultado del operador / es el cociente de la división del primer operando por el segundo; el resultado del operador% es el resto. En ambas operaciones, si el valor del segundo operando es cero, el comportamiento no está definido.