import subprocess from concurrent.futures import ThreadPoolExecutor MODULO = 999999937 # Funkcja do wywołania ./computeC def run_computeC(a, b, sigma): result = subprocess.run(["./computeC", str(a), str(b), str(sigma)], capture_output=True, text=True) if result.returncode != 0: raise RuntimeError(f"Error running computeC: {result.stderr}") return int(result.stdout.strip()) % MODULO # Główna funkcja def parallel_calculate_C_sigma(a_start, b_end, sigma, num_chunks): chunk_size = (b_end - a_start + 1) // num_chunks ranges = [(a_start + i * chunk_size, min(a_start + (i + 1) * chunk_size - 1, b_end)) for i in range(num_chunks)] with ThreadPoolExecutor() as executor: futures = [executor.submit(run_computeC, a, b, sigma) for a, b in ranges] results = [f.result() for f in futures] return sum(results) % MODULO # Parametry a_start, b_end, sigma = 1, 10000, 42 num_chunks = 32 # Liczba podziałów równoległych result = parallel_calculate_C_sigma(a_start, b_end, sigma, num_chunks) print(f"C_sigma({a_start}, {b_end}) = {result}")