From 1eefd58ca4fdb5d2f51f657bfd70c9a89a4707db Mon Sep 17 00:00:00 2001 From: Iru Cai Date: Thu, 24 May 2018 21:39:58 +0800 Subject: initial commit --- euler21.c | 52 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 euler21.c (limited to 'euler21.c') diff --git a/euler21.c b/euler21.c new file mode 100644 index 0000000..d18e556 --- /dev/null +++ b/euler21.c @@ -0,0 +1,52 @@ +#include +#include +#define MAX 9999 + +int firstdiv(int n) +{ + int i; + int q=ceil(sqrt(n)); + for (i=2;i<=q;++i){ + if (n%i==0) + return i; + } + return n; +} + +int divexp(int n,int d) +{ + int dd=1; + while (n%d==0){ + n/=d; + dd*=d; + } + return dd; +} + +int sumdiv(int n) +{ + if (n==1) + return 1; + + int fd=firstdiv(n); + int fdexp=divexp(n,fd); + return sumdiv(n/fdexp)*(fdexp*fd-1)/(fd-1); +} + +int main() +{ + int d[MAX+1],i,sum=0; + for (i=1;i<=MAX;++i){ + d[i]=sumdiv(i)-i; + } + for (i=1;i<=MAX;++i){ + if (iMAX && sumdiv(d[i])-d[i]==i){ + sum+=i; + } + } + printf("%d\n",sum); + return 0; +} + -- cgit v1.2.3