C语言质因数分解超时,求优化,有什么好算法也说一下

#include
#include
int su(unsigned n)
{
if(n==0)
{
return 0;
}
else if(n==1)
{
return 0;
}
else if(n==2||n==3)
{
return 1;
}
else
{
int k,g=2;
k=sqrt(n);
while(g<k)
{
if(n%g==0)
{
return 0;
goto kk;
}
g++;
}
if(n%g!=0)
{
return 1;
}
else
{
return 0;
}
}
kk:;
}
main()
{
unsigned n,g,v;
int f=0;
while(scanf("%d",&n))
{
g=su(n);
if(g==1)
{
printf("%d\n",n);
}
if(g==0)
{
int i=2,no[1000],on[1000],a=0,k=0;
while(n!=1)
{
while(n%i!=0)
{
i++;
}
while(n%i==0)
{
no[a]=i;
n/=i;
k++;
on[a]=k;
}
a++,k=0;
}

       for(v=0;v<a;v++)
       {
           if(on[v]==1)
            {
                printf("%d",no[v]);
                f++;
            }
            else if(on[v]==0)
            {
                ;
            }
            else
            {
               printf("%d^%d",no[v],on[v]);
                f++;
            }
            if(f<a)
            {
                printf("*");
            }
        }
       printf("\n");
       f=0;
   }
}

}

http://www.linuxidc.com/Linux/2012-03/56650.htm