Co ja wlasciwie tu zle zrobilem? - Generowanie liczb pierwszych.

0

Czemu to nie dziala?




print("Wprowadz do jakiej liczby mam generowac liczby pierwsze")
n=int(input())
dzielnik=1
liczba=2
liczbadzielnikow=0
for i in range (n-1) :
    
    for j in range (liczba):
        if liczba%dzielnik==0:
            dzielnik+=1
            liczbadzielnikow+=1
            

    
    if liczbadzielnikow==2:
        print(liczba)
    if liczbadzielnikow > 2:
        liczbadzielnikow-=liczbadzielnikow
    if dzielnik > 1:
        dzielnik=dzielnik-dzielnik+1
    
      
    liczba+=1
0
  1. Czemu range(n-1) ? A co jeśli n-1 lub n będzie pierwsza?
    Nie lubię dawać gotowców, ale masz:
n=int(input("Wprowadz do jakiej liczby mam generowac liczby pierwsze:\n"))
primes = set()
for i in range (n+1) :
    if i>1:
      for j in range (2,i):
        if not i%j:
          break
      else:
        primes.add(i)

print(primes)

Zauważ else odnosi się do for, nie do if

0

Szybsza wersja, jeśli nie ma dzielnika do pierwiastka włącznie to liczba na pewno jest pierwsza. Dało by się przyśpieszyć jeszcze bardziej, tzw sitem.

def czypier(liczba):

    licznik = 2
    while licznik * licznik <= liczba:
        if liczba % licznik == 0:
            return False
        licznik += 1
    return True


granica=int(input("Wprowadz do jakiej liczby mam generowac liczby pierwsze:\n"))
for i in range(2, granica + 1):
    if czypier(i):
        print(i)

1

Jak Chcesz szybko generowac liczby pierwsze to tylko: https://pl.wikipedia.org/wiki/Sito_Eratostenesa .
Zajrzyj też na mój github, tam jest sporo algorytmów z liczbami pierwszymi, włącznie z inkryminowanym.

1 użytkowników online, w tym zalogowanych: 0, gości: 1