34 lines
507 B
C
34 lines
507 B
C
#include <stdio.h>
|
|
#include "divisor_sum.h"
|
|
|
|
unsigned long isqrt(unsigned long n)
|
|
{
|
|
unsigned long r = n;
|
|
while (r*r > n)
|
|
{
|
|
r = r + n/r;
|
|
r = r/2;
|
|
}
|
|
return r;
|
|
}
|
|
|
|
unsigned long divisor_sum(unsigned long n)
|
|
{
|
|
if(n == 1)
|
|
{
|
|
return 0;
|
|
}
|
|
if(n<3)
|
|
return 1;
|
|
unsigned long tmp = 1;
|
|
for(unsigned long i = 2; i*i <= n; i++)
|
|
{
|
|
if(n%i == 0)
|
|
tmp += i +n/i;
|
|
if(i*i == n)
|
|
tmp-=i;
|
|
|
|
}
|
|
return tmp;
|
|
}
|