Problem 3 auf projecteuler.net
Hier mal wieder eine weitere Project-Euler Lösung. Dieses Mal für das Problem 3 und wieder in der Programmiersprache C.
gcc -Wall -march=native -mtune=native -O3 -std=c11 -ffast-math prob3.c -lm -o prob3 && time ./prob3
Result: 6857
real 0m0.007s
user 0m0.007s
sys 0m0.000s
Hier der Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
#include <stdio.h> #define NUM 600851475143 typedef enum { false, true } bool; inline static unsigned long long square(unsigned long long n) { return n * n; } static bool isPrime(unsigned long long n) { if(n == 1) return false; else if(n == 2) return true; else { unsigned long long i, r = (unsigned long long) __builtin_sqrt(n); for(i = 3; i <= r && n % i != 0; i+=2); return (r == i - 1) ? true : false; } } int main(void) { unsigned long long max_fac = 0; for(unsigned long long x = 1; square(x) <= NUM; ++x) if((NUM % x) == 0) if(isPrime(x) == true) if(x > max_fac) max_fac = x; printf("Result: %llu\n", max_fac); return 0; } |
Veröffentlicht am 18. Dezember 2015 von admin in C, Programmierung, projecteuler