Есть несколько логических ошибок:
if (num%i) // Change this to...
if ((num%i)==0) // num%i == 0 when i divides num, this 'i' is a prime factor.
Кроме того, вы будете печатать только примерно половину простых факторов, остановившись на <sqrt(num)
.Либо измените условие выхода цикла for на i <= num
:
for (i = 2; i <= num; i=next_prime(i)) { // note the <=
if (num %i){
printf("%d ", i);
}
}
Или альтернативный, более эффективный метод.Обратите внимание, что факторы не будут в порядке:
for (i = 2; i <= sqrt(num); i=next_prime(i)) {
if (num %i){
printf("%d %d ", i, num/i); // Print out the pair, since we stop at i<=sqrt(num)
}
}