SergeyIT, да всё правильно. Если в данной программе убрать вызов printf, то увеличение производительности будет незначительно, если вооще заметно. А вот код нахождения чисел нуждается в оптимизации, что как раз заметно скажется на производительности.
Навскидку исправлено то, что сразу вызывает сомнение:
#include <stdio.h>
unsigned long int max;
unsigned long int power;
int getdivnumb(numb) {
unsigned long int i, divnumb;
divnumb = 2;
for (i = 2; i <= (numb/2); i++) {
if (numb % i == 0) {
divnumb++;
if (divnumb > power) {
return 0;
}
};
}
return divnumb == power;
}
main(int argc, char *argv[]) {
unsigned long int i;
max = atol(argv[2]);
power = atol(argv[3]);
for (i = atol(argv[1]); i < max; i++) {
if (getdivnumb(i)) {
printf("%lu\n",i);
}
}
}
Этот код производительнее более, чем в 5 раз (при вызове с аргументами "2 200000 3").