TP-02/divisor_sum/divisor_sum.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;
}