diff options
| author | Reiner Herrmann <reiner@reiner-h.de> | 2014-08-31 20:21:45 +0200 |
|---|---|---|
| committer | Reiner Herrmann <reiner@reiner-h.de> | 2014-08-31 20:35:09 +0200 |
| commit | 95341b61b030c9e1290f3b326cb7ec584f543aea (patch) | |
| tree | 852386fa04d32eb859bca11c0eff7b5ef9e50f00 /087.c | |
| parent | 571164d977f91925c4c76a292f74f5f93d09ae23 (diff) | |
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; +} + |
