c crash undefined-behavior modulo perfect-numbers

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.