Ik wist niet hoe ik het moest omschrijven, want dit is een hele vreemde bug. Eerst even de relevante code:
Ik ben dus bezig met het volgende voor een hackchallenge: Alle priemen onder een gegeven nummer berekenen, daar van elke 2e weggooien, dan van iedere priem het eerste en laatste cijfer optellen, en dan dat getal ontbinden in factoren (of hoe heette dat ook alweer). Vervolgens die factoren optellen en er komt een antwoord uitrollen. Het vervelende is dat dit binnen 3 seconden moet gebeuren, en daarom ben ik als een gek gaan optimaliseren, maar ik heb schijnbaar iets gebroken, in een stuk code waar ik nog helemaal niet aan gezeten heb
In het programma wordt dus een grote tabel met priemen onder dat getal gegenereerd. Dit gaat van klein naar groot (om snelheidsredenen), en daarom moet de array daarna omgedraaid worden. Dat doet dit stukje code.
Hier even wat output zodat je kunt zien wat er gebeurt:
getal=53
getal=47
getal=19
De bovenste rij is steeds van de originele array, de onderste rij is van de nieuwe array na het overzetten. Zoals je in de code kunt zien doorloop ik de arrays op precies dezelfde manier als ik bij het overzetten doe; dus het is mij een raadsel wat er fout gaat.
edit:
Ik heb het zojuist ook op mijn Windows bak getest en die voert het wel normaal uit (Dev-C++). Ik compile op m'n Linux bak dit progje trouwens met:
Heb het ook al zonder optimization geprobeerd, maar dat mocht ook niet baten.
C++:
1
2
3
4
5
6
7
8
9
10
11
12
13
| for (int i=0;i<number_of_primes;i++) printf("%i ",large_prime_table[number_of_primes-i-1]); printf("\n"); /* priemen achterstevoren overzetten naar geheugenefficiente tabel */ prime_table = new int[number_of_primes]; for (int i=0;i<number_of_primes;i++) prime_table[i] = large_prime_table[number_of_primes-i-1]; delete [] large_prime_table; for (int i=0;i<number_of_primes;i++) printf("%i ",prime_table[i]); |
Ik ben dus bezig met het volgende voor een hackchallenge: Alle priemen onder een gegeven nummer berekenen, daar van elke 2e weggooien, dan van iedere priem het eerste en laatste cijfer optellen, en dan dat getal ontbinden in factoren (of hoe heette dat ook alweer). Vervolgens die factoren optellen en er komt een antwoord uitrollen. Het vervelende is dat dit binnen 3 seconden moet gebeuren, en daarom ben ik als een gek gaan optimaliseren, maar ik heb schijnbaar iets gebroken, in een stuk code waar ik nog helemaal niet aan gezeten heb

In het programma wordt dus een grote tabel met priemen onder dat getal gegenereerd. Dit gaat van klein naar groot (om snelheidsredenen), en daarom moet de array daarna omgedraaid worden. Dat doet dit stukje code.
Hier even wat output zodat je kunt zien wat er gebeurt:
getal=53
code:
1
2
| 53 47 43 41 37 31 29 23 19 17 13 11 7 5 3 2 53 47 43 41 37 31 9 23 9 17 13 11 7 5 3 2 |
getal=47
code:
1
2
| 47 43 41 37 31 29 23 19 17 13 11 7 5 3 2 47 43 41 37 31 9 23 9 17 13 11 7 5 3 2 |
getal=19
code:
1
2
| 19 17 13 11 7 5 3 2 19 72 9 11 9 5 3 2 |
De bovenste rij is steeds van de originele array, de onderste rij is van de nieuwe array na het overzetten. Zoals je in de code kunt zien doorloop ik de arrays op precies dezelfde manier als ik bij het overzetten doe; dus het is mij een raadsel wat er fout gaat.
edit:
Ik heb het zojuist ook op mijn Windows bak getest en die voert het wel normaal uit (Dev-C++). Ik compile op m'n Linux bak dit progje trouwens met:
code:
1
| g++ -o primes -O3 primes.cpp |
Heb het ook al zonder optimization geprobeerd, maar dat mocht ook niet baten.
[ Voor 15% gewijzigd door Verwijderd op 05-09-2004 03:24 ]