diff --git a/prime.cs b/prime.cs index ccb70ef..1879460 100644 --- a/prime.cs +++ b/prime.cs @@ -1,31 +1,82 @@ +// using System; + +// class Program{ +// static bool is_prime(int n) { +// if (n <= 1) { +// return false; +// } +// var end = Math.Sqrt(n); +// for(int i = 2 ; i <= end ; i++) +// if (n % i == 0) { +// return false; +// } +// return true; +// } +// static void Main(string[] args){ +// var start = DateTime.Now; +// var c = 0; +// for (int i=0;i<9000000;i++){ +// if (is_prime(i)){ +// c++; +// } +// } + +// var end = DateTime.Now; + +// Console.WriteLine(c); +// Console.Write( (int) (end-start).TotalMilliseconds ); +// Console.WriteLine("ms"); +// } + +// } + using System; -class Program{ - static bool is_prime(int n) { - if (n <= 1) { - return false; +class Program +{ + static void Main(string[] args) + { + var start = DateTime.Now; + int N = 9000000; + bool[] isPrime = new bool[N + 1]; + + // Initialize all numbers to be prime + for (int i = 2; i <= N; i++) + { + isPrime[i] = true; } - var end = Math.Sqrt(n); - for(int i = 2 ; i <= end ; i++) - if (n % i == 0) { - return false; + + // Mark all multiples of each prime as not prime + for (int i = 2; i * i <= N; i++) + { + if (isPrime[i]) + { + for (int j = i * i; j <= N; j += i) + { + isPrime[j] = false; + } } - return true; - } - static void Main(string[] args){ - var start = DateTime.Now; - var c = 0; - for (int i=0;i<9000000;i++){ - if (is_prime(i)){ + } + + int c = 0; + // Print all prime numbers + Console.WriteLine("Prime numbers:"); + for (int i = 2; i <= N; i++) + { + if (isPrime[i]) + { c++; } + } - var end = DateTime.Now; + var end = (DateTime.Now - start).TotalMilliseconds; + Console.WriteLine(c); - Console.Write( (int) (end-start).TotalMilliseconds ); - Console.WriteLine("ms"); - } + Console.WriteLine(String.Format("{0} in {1} ms", c,end)); + Console.ReadKey(); + } } + diff --git a/prime.py b/prime.py index 3f224e5..3e2dac2 100644 --- a/prime.py +++ b/prime.py @@ -1,22 +1,40 @@ -import math -import time +# general way for this problem +# import math +# import time -def is_prime(n): - if n <= 1: - return False; +# def is_prime(n): +# if n <= 1: +# return False; - end = int(math.sqrt(n)) - for i in range(2, end+1): - if n % i == 0: - return False - return True +# end = int(math.sqrt(n)) +# for i in range(2, end+1): +# if n % i == 0: +# return False +# return True + + +# start = time.time() * 1000 +# c = 0 +# for i in range(0,9000000): +# if is_prime(i): +# c+=1 +# print(c); +# print( (time.time()*1000) - start); -start = time.time() * 1000 -c = 0 -for i in range(0,9000000): - if is_prime(i): - c+=1 -print(c); -print( (time.time()*1000) - start); +# implementation via (Sieve of Eratosthenes) algorithm +import time + +def count_primes(n: int) -> int: + s = time.time() * 1000 + primes = [True] * n + primes[0] = primes[1] = False + for i in range(2, int(n ** 0.5) + 1): + if primes[i]: + for j in range(i * i, n, i): + primes[j] = False + return sum(primes), (time.time() * 1000 - s) + +c,e = count_primes(9000000) +print(f"Found {c} prime number in {e}ms")