Project Euler - problem 012
The sequence of triangle numbers is generated by adding the natural numbers. So the 7th triangle number would be 1 + 2 + 3 + 4 + 5 + 6 + 7 = 28. The first ten terms would be:
1, 3, 6, 10, 15, 21, 28, 36, 45, 55, …
Let us list the factors of the first seven triangle numbers:
1: 1
3: 1,3
6: 1,2,3,6
10: 1,2,5,10
15: 1,3,5,15
21: 1,3,7,21
28: 1,2,4,7,14,28
We can see that the 7th triangle number, 28, is the first triangle number to have over five divisors.
Which is the first triangle number to have over five-hundred divisors?
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 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 | #include <iostream> #include <ctime> using namespace std; #define antDivisors 500 bool divisors(int num); bool isPrimeNumber(int num); int main () { clock_t start = clock(); int res(0), temp(0); while( ! divisors(res) ){ temp++; res += temp; } cout << "resultatet er "; cout << res << "n"; cout<< ( ( clock() - start ) / (double)CLOCKS_PER_SEC ) <<'n'; return 0; } //from http://mathschallenge.net/index.php?section=faq&ref=number/number_of_divisors bool divisors(int num) { int i, ant, factor; if(num == 0){ return false; } i = 2; factor = 0; ant = 1; while (num % i == 0) { factor++; num /= i; } ant *= factor + 1; factor = 0; i++; while (i <= num) { while (!isPrimeNumber(i)) { i+=2; } while (num % i == 0) { factor++; num /= i; } ant *= factor + 1; factor = 0; i+=2; } return (ant >= antDivisors); } bool isPrimeNumber(int num){ if( num % 2 == 0){ return false; } for(int i = 3; (i-1)*(i-1) < num ; i+=2){ if( num % i == 0){ return false; } } return true; } |
57 return (ant >= antDivisors);
?? schnall ich net.
ah, doch. habe die konstantedefinition übersehen