Ik had op GoT een prachtig stukje Java-code gevonden waarmee je priemgetallen kunt berekenen en op het scherm kunt tonen:
Dit heb ik nodig voor een programmaatje dat ik in C++ maak dat ook priemgetallen moet kunnen vinden. Ik heb de code omgezet naar C++ maar dan doet 'ie het opeens niet meer
Voor zover ik kan zien zien beide codes identiek aan elkaar
Maar op de een of andere manier vind de C++ variant maar 11 ipv 25 priemgetallen t/m de 100...
Wie ziet wat ik fout doe
Java:
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
| public class Priem { public static void main(String[] ps) { int MAX = 100; final int MAXHALF = (MAX - 1)/2; boolean[] numbers = new boolean[MAXHALF]; int i, j, a; double l; long millis = System.currentTimeMillis(); l = (Math.sqrt(MAX) - 1.0) / 2.0; for(i= 1; i <= l; ++i) { if(!numbers[i]) { a= i * 2 + 1; for(j= i + a; j < MAXHALF; j+= a) { if(!numbers[j]) numbers[j]= true; } } } System.out.println("Miliseconds: " + (System.currentTimeMillis() - millis)); System.out.print("2 "); for(j= 0, i= 1; i < MAXHALF; ++i) { if (!numbers[i]) { if (j++<20) System.out.print((i * 2 + 1) + " "); } } System.out.println("\nTotaal: " + j); System.out.println(MAXHALF); System.out.println(l); } } |
Dit heb ik nodig voor een programmaatje dat ik in C++ maak dat ook priemgetallen moet kunnen vinden. Ik heb de code omgezet naar C++ maar dan doet 'ie het opeens niet meer
C++:
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
| #include <iostream> #include <limits> #include <cmath> using namespace std; int main(int argc, char *argv[]) { // Selecteer priemgetallen int MAX = 100; const int MAXHALF = (MAX - 1)/2; bool numbers[MAXHALF]; int i, j, a; double l; l = (sqrt((double) MAX) - 1.0) / 2.0; for(i= 1; i <= l; ++i) { if(!numbers[i]) { a= i * 2 + 1; for(j= i + a; j < MAXHALF; j+= a) if(!numbers[j]) numbers[j]= true; } } cout << "2 "; for(j= 0, i= 1; i < MAXHALF; ++i) { if (!numbers[i]) { j++; cout << (i * 2 + 1) << " "; } } cout << endl << "Totaal: " << j << endl; cout << "MAXHALF: " << MAXHALF << endl; cout << "l: " << l << endl; system("PAUSE"); return 0; } |
Voor zover ik kan zien zien beide codes identiek aan elkaar
Wie ziet wat ik fout doe
[ Voor 8% gewijzigd door Priet op 19-05-2003 00:02 . Reden: code-tag ]
"If you see a light at the end of a wormhole, it's probably a photon torpedo!"