diff options
Diffstat (limited to '087.c')
| -rw-r--r-- | 087.c | 42 |
1 files changed, 42 insertions, 0 deletions
@@ -0,0 +1,42 @@ +#include "common.h" +#include <stdlib.h> +#include <string.h> + +const unsigned long limit = 50000000; + +int main(void) +{ + unsigned long* p = primes(8000); + unsigned long count = p[0]; + unsigned long i2, i3, i4, counter; + char* numbers = malloc(limit*sizeof(char)); + memset(numbers, 0, limit); + + for(i2=1; i2<=count; i2++) + for(i3=1; i3<=count; i3++) + for(i4=1; i4<=count; i4++) + { + unsigned long p4 = p[i4]; + unsigned long p3 = p[i3]; + unsigned long p2 = p[i2]; + unsigned long long result = (unsigned long long)p4*p4*p4*p4; + if(result >= limit) break; + result += (unsigned long long)p3*p3*p3; + if(result >= limit) break; + result += (unsigned long long)p2*p2; + if(result >= limit) break; + + numbers[result] = 1; + } + + counter = 0; + for(i2=0; i2<limit; i2++) + if(numbers[i2] == 1) + counter++; + + printf("%li\n", counter); + + free(p); + return 0; +} + |
