mirror of
https://github.com/RobTillaart/Arduino.git
synced 2024-10-03 18:09:02 -04:00
85 lines
1.2 KiB
C++
85 lines
1.2 KiB
C++
//
|
|
// FILE: seconds.ino
|
|
// AUTHOR: Rob Tillaart
|
|
// PURPOSE: demo
|
|
// URL: https://github.com/RobTillaart/timing
|
|
|
|
|
|
#include "timing.h"
|
|
|
|
|
|
#if defined(ESP32)
|
|
#define MAXPRIMES 800
|
|
const uint32_t mx = 1000000;
|
|
#else
|
|
#define MAXPRIMES 800
|
|
const uint32_t mx = 15000;
|
|
#endif
|
|
|
|
|
|
uint16_t primes[MAXPRIMES];
|
|
uint16_t idx = 0;
|
|
uint32_t x = 1;
|
|
|
|
|
|
void setup()
|
|
{
|
|
Serial.begin(115200);
|
|
Serial.println(__FILE__);
|
|
Serial.println("UNO (16Mhz) takes ~ 30 seconds...");
|
|
Serial.println("ESP32 (240MHz) takes ~ 10 seconds...");
|
|
|
|
delay(10);
|
|
seconds sec; // starts at zero
|
|
while (x < mx)
|
|
{
|
|
nextPrime();
|
|
}
|
|
Serial.print("Seconds:\t");
|
|
Serial.println(sec.now());
|
|
|
|
delay(10);
|
|
x = 1;
|
|
sec.set(); // starts at zero
|
|
while (x < mx)
|
|
{
|
|
nextPrime();
|
|
}
|
|
Serial.print("Seconds:\t");
|
|
Serial.println(sec.now());
|
|
|
|
Serial.println("\nDone...");
|
|
}
|
|
|
|
|
|
void loop()
|
|
{
|
|
}
|
|
|
|
|
|
// sort of sieve.
|
|
int nextPrime()
|
|
{
|
|
bool prime = true;
|
|
do
|
|
{
|
|
prime = true;
|
|
x++;
|
|
for (uint16_t i = 0; i < idx; i++)
|
|
{
|
|
if ( (x % primes[i]) == 0)
|
|
{
|
|
prime = false;
|
|
break;
|
|
}
|
|
}
|
|
} while (!prime);
|
|
if (idx < MAXPRIMES) primes[idx++] = x;
|
|
|
|
return x;
|
|
}
|
|
|
|
|
|
// -- END OF FILE --
|
|
|