number-sets/code-files/calculate-primes.py

64 lines
2.1 KiB
Python
Raw Normal View History

2024-12-20 20:15:01 +02:00
import numpy as np
import time
import os
def clear_terminal():
"""Clear the terminal screen."""
os.system('cls' if os.name == 'nt' else 'clear')
def sieve_of_eratosthenes(limit):
"""Sieve of Eratosthenes to find all primes up to 'limit'."""
sieve = np.ones(limit // 3 + (limit % 6 == 2), dtype=bool)
sieve[0] = sieve[1] = False # 0 and 1 are not prime
# Iterate only for numbers that are prime
for i in range(1, int(limit**0.5) // 3 + 1):
if sieve[i]:
prime = 3 * i + 1
sieve[3 * i + prime::prime * 3] = False
primes = [2, 3]
for i in range(1, len(sieve)):
if sieve[i]:
primes.append(3 * i + 1)
return primes
def write_prime_to_file(prime, filename):
"""Write the hexadecimal and decimal representation of a prime number to the file."""
hex_prime = f"{prime:08X}" # Convert to hex with leading zeros (8 digits)
with open(filename, 'a') as f: # Open in append mode
f.write(f"{hex_prime} {prime}\n")
def main():
limit = 4294967295
filename = 'primes.txt'
# Start the sieve calculation and time it
start_time = time.time()
total_primes = 0
for prime in sieve_of_eratosthenes(limit):
total_primes += 1
write_prime_to_file(prime, filename)
# Clear the terminal and update information
clear_terminal()
elapsed_time = time.time() - start_time
estimated_time_left = (elapsed_time / total_primes) * (len(primes) - total_primes) if total_primes > 0 else 0
# Print the last prime, elapsed time, estimated time left, and total primes found
print(f"Last Prime Found: {prime}")
print(f"Total Primes Found: {total_primes}")
print(f"Elapsed Time: {elapsed_time:.2f} seconds")
print(f"Estimated Time Left: {estimated_time_left:.2f} seconds")
# Print final completion message
print(f"Finished calculating primes up to {limit}.")
print(f"Total Primes Found: {total_primes}")
print(f"Total Elapsed Time: {elapsed_time:.2f} seconds")
if __name__ == "__main__":
main()