Python: Asal Sayi Kodu Calismiyor

BuratakeN

Zeptopat
Katılım
29 Kasım 2022
Mesajlar
2
Daha fazla  
Cinsiyet
Erkek
Soru: 10001. asal nedir?
Cevabim:
Python:
def asal_kontrol(x):
    for i in range(2,int(x**1/2)+1,1):    ## Rasyonel bir sayi kendisini olusturan asal carpanlarindan olusur. Bir sayinin koku sayinin diger asal carpanlarindan daha buyuktur.
        if x%i==0:
            return True
        else:
            return False

Asallar = list()
Asallar.append(2)

sayi=3
sayac=1
while len(Asallar) < 10001:
    if asal_kontrol(sayi):
        Asallar.append(sayi)
        sayi+=2
        sayac+=1
    else:
        sayi+=2
print(Asallar)

Kodum calismiyor.
Hatam nerede bilmiyorum yardimci olur musunuz?
Siz yazsaniz nasil yazardiniz?
 
Son düzenleyen: Moderatör:
10001 sayı için biraz beklemen gerekir.


Python:
n_asal = 0
sayi = 0
son_asal = 0
sayac = 0

while n_asal < 10001:
 
    for i in range(1, sayi+1):
        if sayi%i == 0:
            sayac +=1
       
   
    if sayac == 2:
        n_asal +=1
        son_asal = sayi
   
    sayac = 0
    sayi +=1

   
 

print(n_asal, ". asal sayı " ,son_asal)
 
Son düzenleme:
10001 sayı için biraz beklemen gerekir.


Python:
n_asal = 0
sayi = 0
son_asal = 0
sayac = 0

while n_asal < 10001:
 
    for i in range(1, sayi+1):
        if sayi%i == 0:
            sayac +=1
      
  
    if sayac == 2:
        n_asal +=1
        son_asal = sayi
  
    sayac = 0
    sayi +=1

  
 

print(n_asal, ". asal sayı " ,son_asal)
Kodda mantik hatasi var dongu bir yere varamiyor sadece kendini tekrarliyor.
(Her sey sayaca bagli fakat en sonda sayac sifirlaniyor .)
 
Ben bu şekilde yazardım;
Python:
from math import *

def isPrime(n):
    if (n % 2 == 0 and n != 2 or n == 1):
        return False
    for i in range(2, int(sqrt(n) + 1)):
        if (n % i == 0):
            return False
    return True

c = 0
n = 0
while c < 10001:
    if (isPrime(n)):
        c += 1
        print(f"prime found: {n}, count: {c}")
    n += 1

Bu arada şu problemi mi çözmeye çalışıyorsunuz?
 
Kodda mantik hatasi var dongu bir yere varamiyor sadece kendini tekrarliyor.
(Her sey sayaca bagli fakat en sonda sayac sifirlaniyor .)
Denedim calisiyor. Sonsuz donguye girmiyor. 10001. asal sayiyi hemen bulamaz o kadar.

İsterse 10001'den cok cok kucuk sayilarla dene. 2, 5, 12, 100, 608 falan.

For bittiginde sayac 2 ise bu asal sayidir ve bunu kaydeder. Cunku sadece 1 ve kendisine bolunmus.
tekrar diger sayiyi dener. Sayacin sifirlanmasi gerekir bu yuzden. Taa ki 10001. asal sayiyi bulmak icin.
 
Son düzenleme:

Geri
Yukarı