64 lines
2.1 KiB
Python
64 lines
2.1 KiB
Python
|
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()
|
||
|
|