Почему я получаю «Исключение с плавающей запятой: 8»

Я пытаюсь вычислить все простые числа от 0 до 100, и я получаю исключение с плавающей точкой, может ли кто-нибудь сказать мне, почему? (Если это помогает, я использую gcc)

#include  int main(void) { int nums[100], i; for(i=0;i<100;i++) nums[i] = i; int j,k,l,z; for(i=1;i<100;i++) for(j=2;j<100;j++) if((nums[i] % nums[j]) == 0) { nums[j] = 0; } for(i=0;i<100;i++) if(nums[i] != 0) break; for(z=0;z<100;z++) { for(k=i;k<100;k++) for(l = (k+2);l < 100;l++) if((nums[k] % nums[l]) == 0) nums[k] = 0; } for(i=0;i<100;i++) if(nums[i] != 0) printf("%d,",nums[i]); printf("\n"); return 0; } 

Ну, действительно сложно понять, что делает ваш код. Но до сих пор

 for(i=1;i<100;i++) for(j=2;j<100;j++) if((nums[i] % nums[j]) == 0) { nums[j] = 0; } 

После этого многие значения nums будут nums 0 (Вы можете распечатать и проверить)

Итак, Позже, когда вы делаете

 for(z=0;z<100;z++) { for(k=i;k<100;k++) for(l = (k+2);l < 100;l++) if((nums[k] % nums[l]) == 0) //Part where division by 0 occurs nums[k] = 0; } 

Будет деление на 0 , которое дает floating point exception с floating point exception

отредактированный

Infact, будет floating point exception с floating point exception в первых двух циклах. Когда i=2 и j=2 , nums[2] будет обновляться до значения 0 . Затем позже, когда для i=4 и j=2 . Будет division by 0 , потому что num[2] уже равно 0 , что вызывает floating point exception с floating point exception