Problem 44 auf projecteuler.net
Hier meine Lösung zu Problem 44 auf projecteuler.net. Dank dieser Wiki-Seite konnte man schnell eine Funktion schreiben, die prüft ob eine Zahl eine Pentagonalzahl (oder Fünfeckszahl) ist. Die Lösung habe ich wieder in C geschrieben. Mit folgendem gcc-Befehl lässt sich der Code compilieren und ausführen:
gcc -Wall -O3 -march=native -mtune=native -ffast-math -std=c11 Prob44.c -lm -o Prob44 && time ./Prob44
Das Ergebnis mit der Rechendauer sieht dann so aus:
Result found: 5482660
real 0m0.021s
user 0m0.018s
sys 0m0.004s
Und der Code schaut so aus:
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 |
#include <stdio.h> typedef enum { false, true } bool; bool isPentagonal(long n) { double x = (__builtin_sqrt(24 * n + 1) + 1) / 6; return (x == (long) x) ? true : false; } int main(void) { bool flag = true; for(int i = 1; flag == true; ++i) { int n = i * (3 * i - 1) / 2; for(int j = i - 1; j > 0; j--) { int d = j * (3 * j - 1) / 2; if(isPentagonal(n - d) == true && isPentagonal(n + d) == true) { printf("Result found: %d\n", (n - d)); flag = false; } } } } |
Veröffentlicht am 30. Dezember 2015 von admin in C, Programmierung, projecteuler