Sieve of Erastothenes Benchmark

Dependencies:   mbed

/media/uploads/ckuehnel/sieve_arch_pro.png?200

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?

UserRevisionLine numberNew 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 }