APENAS uma linha
Pensei com muito cuidado na sua pergunta e tentei escrever um código altamente eficiente e com bom desempenho. Para imprimir todos os divisores de um determinado número na tela, precisamos de apenas uma linha de código! (use a opção -std = c99 durante a compilação via gcc)
for(int i=1,n=9;((!(n%i)) && printf("%d is a divisor of %d\n",i,n)) || i<=(n/2);i++);//n is your number
para encontrar números de divisores, você pode usar a seguinte função muito, muito rápida (funciona corretamente para todos os números inteiros, exceto 1 e 2)
int number_of_divisors(int n)
{
int counter,i;
for(counter=0,i=1;(!(n%i) && (counter++)) || i<=(n/2);i++);
return counter;
}
ou se você tratar o número fornecido como um divisor (funcione corretamente para todo o número inteiro, exceto 1 e 2)
int number_of_divisors(int n)
{
int counter,i;
for(counter=0,i=1;(!(n%i) && (counter++)) || i<=(n/2);i++);
return ++counter;
}
NOTA: as duas funções acima funcionam corretamente para todos os números inteiros positivos, exceto os números 1 e 2, portanto, são funcionais para todos os números maiores que 2, mas se você precisar cobrir 1 e 2, poderá usar uma das seguintes funções (um pouco Mais devagar)
int number_of_divisors(int n)
{
int counter,i;
for(counter=0,i=1;(!(n%i) && (counter++)) || i<=(n/2);i++);
if (n==2 || n==1)
{
return counter;
}
return ++counter;
}
OU
int number_of_divisors(int n)
{
int counter,i;
for(counter=0,i=1;(!(i==n) && !(n%i) && (counter++)) || i<=(n/2);i++);
return ++counter;
}
Pequeno é bonito :)