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 <cmath> #include <vector> // much better than bitset: see Tw7DO using namespace std; int main() // sieve of Eratosthenes, upto a value, { // on one whole array, using STL's BITSET, on ODDS const size_t topval = // 541; // C++ // haskell: // primes upto N in value vector<bool> roll/gaps/Wh ARR/Odds STUArray/Odds // FaPOB (this) Ojq01 RzqLP KwZNc // 7919; // 1,000: // 1000003; // 78,499: 0.04 4.8 // 1299709; // 100,000: // 2750159; // 200,000: 0.09 4.8 // 5800079; // 400,000: 0.21 5.8 // 15485863; // 1 mln: 0.06s-2.7MB 1.38s 4.7MB 0.67 7.8 0.43 4.8 // 32452843; // 2 mln: 0.16s-2.7MB 3.25s 4.7MB 2.16 11.9 0.98 5.8 // 49979687; // 3 mln: 0.29s-2.7MB 5.40s 4.7MB // 67867967; // 4 mln: 0.47s-2.7MB 7.68s 4.7MB 5.63 24.2 2.31 8.9 // 86028121; // 5 mln: 0.63s-2.7MB 10.08s 4.7MB 3.04 9.9 // 104395301; // 6 mln: 0.79s-2.7MB 12.66s 4.7MB 9.84 39.6 3.79 10.9 // 113648393; // 6.5 mln: 0.86s-2.7MB 4.14 10.9 // 122949823; // 7 mln: 12.20 36.5 // 133000999; // 7538613: 1.04s-2.7MB 4.95 11.9 141650939; // 8 mln: 1.11s-2.7MB 14.61 40.6 5.32 13.0 // 334214459; // 18 mln: 2.89s-2.7MB 13.65 24.2 // 1000000007; // 50,847,535: 9.45s-2.7MB // 1500000101; // 74,726,535: 14.55s-2.7MB // 1505800000; // 75,001,089: 14.74s-2.7MB // 1505776939; // 75 mln 14.61s-2,7MB // 3-6-18-50-74: O(n^1.45,1.18,1.14,1.12) size_t n = topval/2 + 1; // NATS: (topval+1) size_t m = 250; // print out primes in top 500 of range size_t cnt = n; // count the primes vector<bool> s; s.resize(n, true); // all potential primes are ON size_t itop = ceil( (sqrt(2*n+1)-1)/2 ); // mark off multiples of first primes upto sqrt for( size_t i=1; i <= itop; ++i ) // I=3,5.. , I=2i+1, i=1,2.. { if( s[i] ) // I*I -1 /2 = 4i^2+4i+1 -1 /2 = 2i(i+1) for( size_t j=2*i*(i+1); j<n; j += i+i+1 ) // I*I, +2I, +4I, ... if( s[j] ) { s[j] = false; // mark the composites OFF --cnt; } } if( 2 <= topval && n <= m ) // 2 is a first prime cout << 2; for( size_t k=(n>m?n-m:1), c=0; // print out some last primes k < n; ++k ) if( s[k] ) { cout << " " << 2*k + 1; if( (++c % 8) == 0) cout << endl; } cout << endl << cnt << " primes found." << endl; return 0; } |
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8Y21hdGg+CiNpbmNsdWRlIDx2ZWN0b3I+ICAvLyBtdWNoIGJldHRlciB0aGFuIGJpdHNldDogc2VlIFR3N0RPCiAKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKIAppbnQgbWFpbigpICAvLyBzaWV2ZSBvZiBFcmF0b3N0aGVuZXMsIHVwdG8gYSB2YWx1ZSwgCnsgICAgICAgICAgIC8vIG9uIG9uZSB3aG9sZSBhcnJheSwgdXNpbmcgU1RMJ3MgQklUU0VULCBvbiBPRERTCiAgY29uc3Qgc2l6ZV90IHRvcHZhbCA9IC8vIDU0MTsgICAgLy8gQysrICAgICAgICAvLyAgaGFza2VsbDoKICAgICAvLyAgcHJpbWVzIHVwdG8gTiBpbiB2YWx1ZSAgICB2ZWN0b3I8Ym9vbD4gIHJvbGwvZ2Fwcy9XaCAgIEFSUi9PZGRzICBTVFVBcnJheS9PZGRzCiAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgRmFQT0IgKHRoaXMpICAgICBPanEwMSAgICAgICAgUnpxTFAgICAgICAgIEt3Wk5jCiAgICAgLy8gICAgICA3OTE5OyAgLy8gICAxLDAwMDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAvLyAgIDEwMDAwMDM7ICAvLyAgNzgsNDk5OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAuMDQgIDQuOAogICAgIC8vICAgMTI5OTcwOTsgIC8vIDEwMCwwMDA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgLy8gICAyNzUwMTU5OyAgLy8gMjAwLDAwMDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLjA5ICA0LjgKICAgICAvLyAgIDU4MDAwNzk7ICAvLyA0MDAsMDAwOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAuMjEgIDUuOAogICAgIC8vICAxNTQ4NTg2MzsgIC8vIDEgbWxuOiAgICAgICAwLjA2cy0yLjdNQiAgIDEuMzhzIDQuN01CICAgMC42NyAgNy44ICAgMC40MyAgNC44CiAgICAgLy8gIDMyNDUyODQzOyAgLy8gMiBtbG46ICAgICAgIDAuMTZzLTIuN01CICAgMy4yNXMgNC43TUIgICAyLjE2IDExLjkgICAwLjk4ICA1LjgKICAgICAvLyAgNDk5Nzk2ODc7ICAvLyAzIG1sbjogICAgICAgMC4yOXMtMi43TUIgICA1LjQwcyA0LjdNQiAgIAogICAgIC8vICA2Nzg2Nzk2NzsgIC8vIDQgbWxuOiAgICAgICAwLjQ3cy0yLjdNQiAgIDcuNjhzIDQuN01CICAgNS42MyAyNC4yICAgMi4zMSAgOC45IAogICAgIC8vICA4NjAyODEyMTsgIC8vIDUgbWxuOiAgICAgICAwLjYzcy0yLjdNQiAgMTAuMDhzIDQuN01CICAgICAgICAgICAgICAgMy4wNCAgOS45IAogICAgIC8vIDEwNDM5NTMwMTsgIC8vIDYgbWxuOiAgICAgICAwLjc5cy0yLjdNQiAgMTIuNjZzIDQuN01CICAgOS44NCAzOS42ICAgMy43OSAxMC45CiAgICAgLy8gMTEzNjQ4MzkzOyAgLy8gNi41IG1sbjogICAgIDAuODZzLTIuN01CICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0LjE0IDEwLjkKICAgICAvLyAxMjI5NDk4MjM7ICAvLyA3IG1sbjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTIuMjAgMzYuNQogICAgIC8vIDEzMzAwMDk5OTsgIC8vIDc1Mzg2MTM6ICAgICAxLjA0cy0yLjdNQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNC45NSAxMS45CiAgICAgICAgMTQxNjUwOTM5OyAgLy8gOCBtbG46ICAgICAgIDEuMTFzLTIuN01CICAgICAgICAgICAgICAgIDE0LjYxIDQwLjYgICA1LjMyIDEzLjAKICAgICAvLyAzMzQyMTQ0NTk7ICAvLyAxOCBtbG46ICAgICAgMi44OXMtMi43TUIgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTMuNjUgMjQuMgogICAgIC8vIDEwMDAwMDAwMDc7IC8vIDUwLDg0Nyw1MzU6ICA5LjQ1cy0yLjdNQgogICAgIC8vIDE1MDAwMDAxMDE7IC8vIDc0LDcyNiw1MzU6IDE0LjU1cy0yLjdNQgogICAgIC8vIDE1MDU4MDAwMDA7IC8vIDc1LDAwMSwwODk6IDE0Ljc0cy0yLjdNQiAKICAgICAvLyAxNTA1Nzc2OTM5OyAvLyA3NSBtbG4gICAgICAxNC42MXMtMiw3TUIKICAgICAvLyAgICAgMy02LTE4LTUwLTc0OiBPKG5eMS40NSwxLjE4LDEuMTQsMS4xMikKIAogIHNpemVfdCBuICAgPSB0b3B2YWwvMiArIDE7ICAgICAgICAgICAvLyBOQVRTOiAodG9wdmFsKzEpCiAgc2l6ZV90IG0gICA9IDI1MDsgICAgICAgICAgICAgICAgICAgIC8vIHByaW50IG91dCBwcmltZXMgaW4gdG9wIDUwMCBvZiByYW5nZQogIHNpemVfdCBjbnQgPSBuOyAgICAgICAgICAgICAgICAgICAgICAvLyBjb3VudCB0aGUgcHJpbWVzCiAKICB2ZWN0b3I8Ym9vbD4gczsKICBzLnJlc2l6ZShuLCB0cnVlKTsgICAgICAgICAgICAgICAgICAgLy8gYWxsIHBvdGVudGlhbCBwcmltZXMgYXJlIE9OCiAgCiAgc2l6ZV90IGl0b3AgPSBjZWlsKCAoc3FydCgyKm4rMSktMSkvMiApOyAvLyBtYXJrIG9mZiBtdWx0aXBsZXMgb2YgZmlyc3QgcHJpbWVzIHVwdG8gc3FydAogIAogIGZvciggc2l6ZV90IGk9MTsgaSA8PSBpdG9wOyArK2kgKSAgICAvLyBJPTMsNS4uICwgST0yaSsxLCBpPTEsMi4uCiAgewogICAgaWYoIHNbaV0gKSAgICAgICAgICAgICAgICAgICAgICAgICAvLyBJKkkgLTEgLzIgPSA0aV4yKzRpKzEgLTEgLzIgPSAyaShpKzEpCiAgICAgIGZvciggc2l6ZV90IGo9MippKihpKzEpOyBqPG47IGogKz0gaStpKzEgKSAgIC8vIEkqSSwgKzJJLCArNEksIC4uLgogICAgICAgIGlmKCBzW2pdICkgICAgICAgICAgICAgICAgICAgICAKICAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICBzW2pdID0gZmFsc2U7ICAgICAgICAgICAgICAgIC8vIG1hcmsgdGhlIGNvbXBvc2l0ZXMgT0ZGCiAgICAgICAgICAtLWNudDsKICAgICAgICB9CiAgfQogCiAgaWYoIDIgPD0gdG9wdmFsICYmIG4gPD0gbSApICAgICAgICAgIC8vIDIgaXMgYSBmaXJzdCBwcmltZSAKICAgICAgY291dCA8PCAyOwogIAogIGZvciggc2l6ZV90IGs9KG4+bT9uLW06MSksIGM9MDsgICAgICAvLyBwcmludCBvdXQgc29tZSBsYXN0IHByaW1lcyAKICAgICAgICBrIDwgbjsgKytrICkgCiAgICBpZiggc1trXSApICAgICAgICAgICAgICAgICAgIAogICAgewogICAgICBjb3V0IDw8ICIgIiA8PCAyKmsgKyAxOwogICAgICBpZiggKCsrYyAlIDgpID09IDApIAogICAgICAgIGNvdXQgPDwgZW5kbDsKICAgIH0KICAKICBjb3V0IDw8IGVuZGwgIAogICAgICAgPDwgY250ICA8PCAiIHByaW1lcyBmb3VuZC4iIDw8IGVuZGw7CgogIHJldHVybiAwOwp9Cg==
-
upload with new input
-
result: Success time: 1.03s memory: 2856 kB returned value: 0
141650459 141650461 141650473 141650489 141650507 141650549 141650599 141650603 141650611 141650633 141650651 141650657 141650659 141650671 141650699 141650711 141650737 141650753 141650771 141650779 141650807 141650863 141650891 141650897 141650933 141650939 8000000 primes found.
-
result: Success time: 1.11s memory: 2728 kB returned value: 0
141650459 141650461 141650473 141650489 141650507 141650549 141650599 141650603 141650611 141650633 141650651 141650657 141650659 141650671 141650699 141650711 141650737 141650753 141650771 141650779 141650807 141650863 141650891 141650897 141650933 141650939 8000000 primes found.


