
Sieve of Erastothenes Benchmark
main.cpp@1:0c5680e1cfbc, 2016-02-16 (annotated)
- Committer:
- ckuehnel
- Date:
- Tue Feb 16 18:31:53 2016 +0000
- Revision:
- 1:0c5680e1cfbc
- Parent:
- 0:d11e3ed28115
LED included
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
ckuehnel | 0:d11e3ed28115 | 1 | // |
ckuehnel | 0:d11e3ed28115 | 2 | // Title : Sieve of Eratosthenes |
ckuehnel | 0:d11e3ed28115 | 3 | // Author : Claus Kuehnel |
ckuehnel | 0:d11e3ed28115 | 4 | // Date : 2016-02-16 |
ckuehnel | 0:d11e3ed28115 | 5 | // Id : sieve_ARCH_PRO |
ckuehnel | 0:d11e3ed28115 | 6 | // based on : sieve.pde from 2010 |
ckuehnel | 0:d11e3ed28115 | 7 | // |
ckuehnel | 0:d11e3ed28115 | 8 | // DISCLAIMER: |
ckuehnel | 0:d11e3ed28115 | 9 | // The author is in no way responsible for any problems or damage caused by |
ckuehnel | 0:d11e3ed28115 | 10 | // using this code. Use at your own risk. |
ckuehnel | 0:d11e3ed28115 | 11 | // |
ckuehnel | 0:d11e3ed28115 | 12 | // LICENSE: |
ckuehnel | 0:d11e3ed28115 | 13 | // This code is distributed under the GNU Public License |
ckuehnel | 0:d11e3ed28115 | 14 | // which can be found at http://www.gnu.org/licenses/gpl.txt |
ckuehnel | 0:d11e3ed28115 | 15 | // |
ckuehnel | 0:d11e3ed28115 | 16 | |
ckuehnel | 0:d11e3ed28115 | 17 | #include "mbed.h" |
ckuehnel | 0:d11e3ed28115 | 18 | |
ckuehnel | 0:d11e3ed28115 | 19 | #define TRUE 1 |
ckuehnel | 0:d11e3ed28115 | 20 | #define FALSE 0 |
ckuehnel | 0:d11e3ed28115 | 21 | |
ckuehnel | 0:d11e3ed28115 | 22 | int i,k, prime,count; |
ckuehnel | 0:d11e3ed28115 | 23 | |
ckuehnel | 0:d11e3ed28115 | 24 | const int SIZE = 1000; |
ckuehnel | 0:d11e3ed28115 | 25 | char flags[SIZE+1]; |
ckuehnel | 0:d11e3ed28115 | 26 | |
ckuehnel | 0:d11e3ed28115 | 27 | Serial pc(USBTX, USBRX); |
ckuehnel | 0:d11e3ed28115 | 28 | Timer timer; |
ckuehnel | 0:d11e3ed28115 | 29 | |
ckuehnel | 0:d11e3ed28115 | 30 | DigitalOut myled(LED1); |
ckuehnel | 0:d11e3ed28115 | 31 | |
ckuehnel | 0:d11e3ed28115 | 32 | int main() |
ckuehnel | 0:d11e3ed28115 | 33 | { |
ckuehnel | 1:0c5680e1cfbc | 34 | myled = 0; |
ckuehnel | 0:d11e3ed28115 | 35 | pc.baud(115200); |
ckuehnel | 0:d11e3ed28115 | 36 | pc.printf("Sieve of Eratosthenes - Arch Pro\n"); |
ckuehnel | 0:d11e3ed28115 | 37 | |
ckuehnel | 0:d11e3ed28115 | 38 | /*------------------------------------------------------------------- |
ckuehnel | 0:d11e3ed28115 | 39 | The following code is an implementation of the Sieve of Eratosthenes. |
ckuehnel | 0:d11e3ed28115 | 40 | -------------------------------------------------------------------*/ |
ckuehnel | 0:d11e3ed28115 | 41 | pc.printf("5000 iterations\n"); |
ckuehnel | 0:d11e3ed28115 | 42 | timer.start(); |
ckuehnel | 0:d11e3ed28115 | 43 | unsigned long time = timer.read_ms(); |
ckuehnel | 0:d11e3ed28115 | 44 | for (unsigned int iter = 1; iter <= 5000; iter++) /* do program 5000 times */ |
ckuehnel | 0:d11e3ed28115 | 45 | { |
ckuehnel | 0:d11e3ed28115 | 46 | count = 0; /* initialize prime counter */ |
ckuehnel | 0:d11e3ed28115 | 47 | for (i = 0; i <= SIZE; i++) /* set all flags true */ |
ckuehnel | 0:d11e3ed28115 | 48 | flags[i] = TRUE; |
ckuehnel | 0:d11e3ed28115 | 49 | for (i = 0; i <= SIZE; i++) |
ckuehnel | 0:d11e3ed28115 | 50 | { |
ckuehnel | 0:d11e3ed28115 | 51 | if (flags[i]) /* found a prime */ |
ckuehnel | 0:d11e3ed28115 | 52 | { |
ckuehnel | 0:d11e3ed28115 | 53 | prime = i + i + 3; /* twice index + 3 */ |
ckuehnel | 0:d11e3ed28115 | 54 | for (k = i + prime; k <= SIZE; k += prime) |
ckuehnel | 0:d11e3ed28115 | 55 | flags[k] = FALSE; /* kill all multiples */ |
ckuehnel | 0:d11e3ed28115 | 56 | count++; /* primes found */ |
ckuehnel | 0:d11e3ed28115 | 57 | } |
ckuehnel | 0:d11e3ed28115 | 58 | } |
ckuehnel | 0:d11e3ed28115 | 59 | } |
ckuehnel | 1:0c5680e1cfbc | 60 | myled = 1; |
ckuehnel | 0:d11e3ed28115 | 61 | time = timer.read_ms() - time; |
ckuehnel | 0:d11e3ed28115 | 62 | pc.printf("%d primes.\n", count); |
ckuehnel | 0:d11e3ed28115 | 63 | pc.printf("Runtime = %d ms\n",time); |
ckuehnel | 0:d11e3ed28115 | 64 | } |