i needed to do the -lm to get the object file which has sqrt() defined linked in - per a google search. anywho - here is my response, kinda sucky because there are redundant #'s and little error checking and i am sure it could be done with fewer lines.
it under debian and redhat it compiles fine with

gcc -lm -o numfact numfact.c

Code:
#include<stdio.h>
#include<math.h>
/* okay lets find all pairs of factors for an input number
* all input numbers must be integers greater than zero 
* and checked to see if it is valid. Number must also be 
* less than the maximum value for a unsigned interger (16 bits) */
#define TRUE 1
#define FALSE 0
#define START 1
int is_valid(int num); /* determines if passed value is okay */
void factor_num(int num); /* factors the numbers */
int main()
{
 int number;
 /* get value from user */
 puts("enter an interger greater than zero to get its factors \n");
 scanf("%d",&number);
 if (is_valid(number)==FALSE)
 {
     exit(0);
 }
 factor_num(number);
 return(0);
}
/* lets see if we were passed garbage - this will return
* FALSE if the input is not valid and TRUE if the input
* is valid */
int is_valid(int num)
{
    if (num > 65536) 
    {
        puts("that number is too fucking big \n");
        return(FALSE);
    }
    else if (num <= 0)
    {
        puts("either thats zero - or less than zero \n");
        return(FALSE);
    }
    else
    {
        return(TRUE);
    }
}
/* this will find all pairs of numbers which are factors of the
* number passed in and print them.                               */

void factor_num(number)
{
    int *val1;
    int *val2;
    int index = START; 
    /*start at 1, number and 1 will always be factors */
    int total_factor_pairs = 1; /* there will always be one pair*/
    int i;
    float lowlim,highlim;
    val1= (int*)malloc(256*sizeof(int));
    val2= (int*)malloc(256*sizeof(int));
    if(number <= 3)
    {
        lowlim = 1;
    }
    else
    {
        lowlim = sqrt(number) ;
    }
    highlim = number/2; 
    *val1 = number;
    *val2 = 1;
    /*only need from the sqrt of num ber to 1/2 number */
    for ( i = lowlim; i <= highlim ; i++)
    {
    if(number%i == 0)
         {
    total_factor_pairs++;
     *(val1+index) = number/i;
     *(val2+index) = i;
            index++;
    }
         
    }
    puts(" ");
    printf("there are %d factor pairs, they are:\n",total_factor_pairs);
    for(i = total_factor_pairs-1 ;i >= 0 ;i--)
    {
        printf("\t %d \t %d \n",*(val1+i),*(val2+i));
    }

}