Во-первых, обратите внимание, что в вашем коде есть ошибка в том, что tmp[3]
никогда не будет инициализирован: вы начинаете prim_
с 3
и увеличиваете его перед присвоением tmp[prim_]
. Таким образом, каждый раз через l oop, когда j==3
, вы читаете неинициализированную память, и ваш код имеет неопределенное поведение. Возможно, вы хотели поменять местами строки prim_++; tmp[prim_]=i;
или просто написать tmp[prim_++]=i;
.
. После исправления этого подумайте о том, что происходит, когда вы go через l oop набираете i==1
. 1 не делится на любое целое число больше 1, поэтому ваш код сделает вывод, что оно простое, и установит tmp[3]=1
. Поскольку каждое число делится на 1, то на каждой последующей итерации внешнего l oop вы выйдете из внутреннего l oop, как только j==3
. Это, очевидно, сделает это намного быстрее, чем если бы j
потенциально мог бы go вплоть до prim_
. Это также сделает вашу программу бесполезной, так как она решит, что нет простых чисел, превышающих 5.
Большинство логик c, которые имеют дело с простыми числами, требует специального случая для числа 1, и это не исключение. Ваша программа вообще не имеет смысла начинать со значения i
меньше 2.