From 9920a766c17402a58fc4457d2fc643cc7905e684 Mon Sep 17 00:00:00 2001 From: Iru Cai Date: Mon, 11 Jun 2018 16:46:43 +0800 Subject: 112, 345-347 --- euler346.c | 50 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) create mode 100644 euler346.c (limited to 'euler346.c') diff --git a/euler346.c b/euler346.c new file mode 100644 index 0000000..dc10d65 --- /dev/null +++ b/euler346.c @@ -0,0 +1,50 @@ +#include +#include +#include + +#define MAXN 1000000000000 +#define NRUMAX 10000000 + +long long ru[NRUMAX]; +int nru = 0; + +int comp(const void *a, const void *b) +{ + long long x = *(long long*)a; + long long y = *(long long*)b; + + if (x < y) + return -1; + else if (x > y) + return 1; + else + return 0; +} + +int main() +{ + long long sum_repunit = 1; /* 1 is a strong repunit */ + for (int base = 2; base < 1000000; base++) { + long long repunit = 1 + base; + long long nb = base; + while (1) { + nb *= base; + repunit += nb; + if (repunit >= MAXN) + break; + assert(nru < NRUMAX); + ru[nru] = repunit; + nru++; + } + } + + qsort(ru, nru, sizeof(long long), comp); + + printf("Find %d strong repunits.\n", nru + 1); + for (int i = 0; i < nru; i++) { + if (i > 0 && ru[i] == ru[i-1]) + continue; + sum_repunit += ru[i]; + } + printf("Their sum is %lld\n", sum_repunit); +} -- cgit v1.2.3