From bdf922b5c89fa0af9ea3f9d3bf887169bb5f8b61 Mon Sep 17 00:00:00 2001 From: Vitaliy Filippov Date: Sun, 29 Dec 2019 22:39:26 +0300 Subject: [PATCH] Add lua + change cpp, js, rust and php, python, go to 30 iterations --- primes.cpp | 5 +---- primes.go | 8 +------- primes.js | 2 +- primes.lua | 45 +++++++++++++++++++++++++++++++++++++++++++++ primes.php | 2 +- primes.py | 6 +----- primes.rs | 23 +++++++++++------------ 7 files changed, 61 insertions(+), 30 deletions(-) create mode 100644 primes.lua diff --git a/primes.cpp b/primes.cpp index d5caa66..21510d4 100644 --- a/primes.cpp +++ b/primes.cpp @@ -61,10 +61,7 @@ void get_primes7(int n, vector &res) { } int main() { - std::time_t startTime = std::time(NULL); - std::time_t periodTime = (std::time_t) atoi(std::getenv("RUN_TIME")); - - while ((std::time(NULL) - startTime) < periodTime) { + for (int i = 0; i < 30; i++) { vector res; get_primes7(10000000, res); printf("Found %d prime numbers.\n", (int)res.size()); diff --git a/primes.go b/primes.go index 8308ecd..7d969d6 100644 --- a/primes.go +++ b/primes.go @@ -3,8 +3,6 @@ package main import ( "fmt" "math" - "os" - "time" ) func getPrimes7(n int) []int { @@ -49,12 +47,8 @@ func getPrimes7(n int) []int { } func main() { - var startTime = time.Now() - var periodTime, _ = time.ParseDuration(os.Getenv("RUN_TIME") + "s") - var res []int - - for time.Since(startTime) < periodTime { + for i := 0; i < 30; i++ { res = getPrimes7(10000000) fmt.Printf("Found %d prime numbers.\n", len(res)) } diff --git a/primes.js b/primes.js index da10091..8894422 100644 --- a/primes.js +++ b/primes.js @@ -41,7 +41,7 @@ function get_primes7(n) { var startTime = Date.now(); var periodTime = parseInt(process.env.RUN_TIME, 10) * 1000 -while ((Date.now() - startTime) < periodTime) { +for (var i = 0; i < 30; i++) { var res = get_primes7(10000000); console.log("Found " + res.length + " prime numbers."); } diff --git a/primes.lua b/primes.lua new file mode 100644 index 0000000..4e70ac3 --- /dev/null +++ b/primes.lua @@ -0,0 +1,45 @@ +function get_primes7(n) + if n < 2 then return {} end + if n == 2 then return {2} end + + local s = {} + for i = 3, n, 2 do + s[#s+1] = i + end + + local mroot = math.floor(math.sqrt(n)) + local half = #s + local i = 0 + local m = 3 + + while m <= mroot do + if s[i+1] and s[i+1] ~= 0 then + local j = math.floor((m*m-3)/2) -- int div + s[j+1] = 0 + while j < half do + s[j+1] = 0 + j = j + m + end + end + i = i + 1 + m = 2*i + 3 + end + + local res = {} + res[#res+1] = 2 + + for x = 1, #s do + if s[x] ~= 0 then + res[#res+1] = s[x] + end + end + return res +end + +startTime = os.time(os.date("!*t")) +periodTime = os.getenv('RUN_TIME') + +for i = 1, 30 do + local res = get_primes7(10000000) + print("Found " .. #res .. " prime numbers.") +end diff --git a/primes.php b/primes.php index 96a62a0..7b74bc3 100644 --- a/primes.php +++ b/primes.php @@ -36,7 +36,7 @@ $periodTime = getenv('RUN_TIME'); $res = array(); -while ((time() - $startTime) < $periodTime) { +for ($i = 0; $i < 30; $i++) { $res = get_primes7(10000000); print "Found ".count($res)." prime numbers.\n"; } diff --git a/primes.py b/primes.py index 174f701..8e669ba 100644 --- a/primes.py +++ b/primes.py @@ -2,7 +2,6 @@ import os import sys import time - def get_primes7(n): """ standard optimized sieve algorithm to get a list of prime numbers @@ -33,9 +32,6 @@ def get_primes7(n): m = 2 * i + 3 return [2] + [x for x in s if x] -start_time = int(time.time()) -period_time = int(os.environ['RUN_TIME']) - -while (int(time.time()) - start_time) < period_time: +for i in range(0, 30): res = get_primes7(10000000) print("Found {} prime numbers.".format(len(res))) diff --git a/primes.rs b/primes.rs index 1196b07..bc794ef 100644 --- a/primes.rs +++ b/primes.rs @@ -43,20 +43,19 @@ fn get_primes7(count: u32) -> Vec { } fn main() { - let run_time_secs = match env::var("RUN_TIME") { - Ok(v) => match v.parse::() { - Ok(i) => i, - Err(err) => panic!("RUN_TIME environment variable error: {}", err), - }, - Err(err) => panic!("RUN_TIME environment variable error: {}", err), - }; +// let run_time_secs = match env::var("RUN_TIME") { +// Ok(v) => match v.parse::() { +// Ok(i) => i, +// Err(err) => panic!("RUN_TIME environment variable error: {}", err), +// }, +// Err(err) => panic!("RUN_TIME environment variable error: {}", err), +// }; - let run_time = Duration::new(run_time_secs as u64, 0); - let start = Instant::now(); +// let run_time = Duration::new(run_time_secs as u64, 0); +// let start = Instant::now(); - while start.elapsed() < run_time { - let primes = get_primes7(PRIMES_COUNT); + for x in 0..29 { + let primes = get_primes7(PRIMES_COUNT); println!("Found {} prime numbers.", primes.len()); } } -