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

Odpowiedz Nowy wątek
2019-01-30 21:19
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
edytowany 1x, ostatnio: Dobry Zawodniczek, 2019-01-30 21:27

Pozostało 580 znaków

2019-01-30 22:10
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

edytowany 1x, ostatnio: Serechiel, 2019-01-30 22:46

Pozostało 580 znaków

2019-01-30 23:22
sig
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)
edytowany 1x, ostatnio: sig, 2019-01-30 23:25

Pozostało 580 znaków

2019-01-31 00:28
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.


Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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