import multiprocessing import numpy as np import random def hesapla(baslangic, basamak_sayisi): """ Computes transformations of the input number and detects cycles. """ toplam_seti = set() # Track previously seen numbers sayi = int(baslangic) limit = 10 ** basamak_sayisi adim = 0 max_steps = 10_000 # Safety limit for iterations while adim < max_steps: # Reduce number to the specified digits sayi %= limit sayi_str = f"{sayi:0{basamak_sayisi}d}" # Compute the digit sum rakamlar = np.array(list(sayi_str), dtype=int) toplam = np.sum(rakamlar) # Compute the new number yeni_hane = (int(sayi_str[1:]) * 10 + toplam % 10) % limit yeni_hane_str = f"{yeni_hane:0{basamak_sayisi}d}" # Debugging: Print each step print(f"Adım: {adim}, Sayı: {sayi_str}, Yeni Hane: {yeni_hane_str}, Toplam: {toplam}") # Check for cycles if yeni_hane_str in toplam_seti: return f"Döngü oluştu! Adım: {adim}, Girilen sayı {basamak_sayisi} basamaklı." # Add the new number to the set and update variables toplam_seti.add(yeni_hane_str) sayi = yeni_hane adim += 1 # If the maximum steps are reached without finding a cycle return f"Adım sınırına ulaşıldı ({max_steps}). Döngü bulunamadı." def get_valid_input(prompt): """ Get a valid numeric input from the user. """ while True: value = input(prompt) if value.isdigit(): return value print("Geçersiz giriş! Lütfen sadece rakamlardan oluşan bir sayı giriniz.") def parallel_hesapla(start_values, basamak_sayisi): """ Run the computation in parallel using multiple cores. """ with multiprocessing.Pool() as pool: results = pool.starmap(hesapla, [(value, basamak_sayisi) for value in start_values]) return results def main(): """ Main function to initiate the computation. """ x = get_valid_input("Lütfen bir sayı giriniz: ") basamak_sayisi = int(get_valid_input("Kullanılacak basamak sayısını giriniz: ")) if basamak_sayisi <= 0: print("Basamak sayısı pozitif bir tamsayı olmalıdır.") return # Generate random start values based on the input number start_values = [str(int(x) + random.randint(0, 1000)) for _ in range(5)] print(f"Başlangıç değerleri: {start_values}") results = parallel_hesapla(start_values, basamak_sayisi) # Print the results for result in results: if result: # If a cycle is detected print(result) break # Stop after the first cycle is found if __name__ == "__main__": main()