Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailem rychla rada. vypocet prvocisel. python3

user napise hornu hranicu mnoziny prirodzenych cisel a program musi vypocitat vsetky prvocisla od zaciatku. dostal som sa potialto:

inp = int(input('write number for all primes up to(included): '))
divisor = 2
primes = []

for num in range(2, inp+1):
    while divisor < num:
        if num % divisor == 0:
            continue
        else:
            divisor = divisor + 1
print(primes)

ale toto neviem kam dat, skusal som vselijako, neislo to:

if divisor == num:
            primes.append(num)

za predpokladu ze by while bolo <=

Předmět Autor Datum
Ten tvůj algoritmus nebude fungovat. https://cs.wikipedia.org/wiki/Eratosthenovo_s%C3%A Dto
Wikan 13.02.2016 19:14
Wikan
akoze nie napisal som toto pre jedno cislo a funguje to spravne inp = int(input('write number for p…
IT_lamiak 13.02.2016 19:17
IT_lamiak
Pro jedno číslo to fungovat bude. Pro více ne, divisor neustále jenom zvyšuješ.
Wikan 13.02.2016 19:20
Wikan
nechapem ten kusok kodu co je pre jedno cislo, to sa ma loopovat pre kazdy element z range(2, inp+1…
IT_lamiak 13.02.2016 19:22
IT_lamiak
Pro každé číslo je nutné nastavit divisor zpátky na původní hodnotu, což neděláš.
Wikan 13.02.2016 19:23
Wikan
vidis, to som potreboval ! dik viete, ked chcete (radcovia) :-D
IT_lamiak 13.02.2016 19:25
IT_lamiak
No a až to budeš mít funkční, tak se můžeš zamyslet nad optimalizacemi.
Wikan 13.02.2016 19:27
Wikan
funguje to takto inp = int(input('write number for all primes up to(included): ')) divisor = 2 prim…
IT_lamiak 13.02.2016 21:09
IT_lamiak
V Pythonu sice nedělám, ale nešlo by to lépe takto? for num in range(2, inp+1): divisor = 2 while d…
Wikan 13.02.2016 21:22
Wikan
fantazia este by sa dalo osekat(else tam netreba). takto to vyzera vo finale: inp = int(input('writ…
IT_lamiak 13.02.2016 21:41
IT_lamiak
Pravda, else už bylo zbytečné. No a teď je teda čas na ty optimalizace.
Wikan 14.02.2016 08:26
Wikan
ako ? ved viac sa to uz orezat neda a na nejake pokrocile funkcie alebo import matematickych modulov…
IT_lamiak 14.02.2016 10:46
IT_lamiak
Úprava na menší počet řádků byl pouze refaktoring. Zoptimalizovat se to dá ještě hodně, takže výsled…
Wikan 14.02.2016 10:49
Wikan
ved hovorim, napis ked vies. preco tolke dotahovacky ? nový
IT_lamiak 14.02.2016 11:05
IT_lamiak
No třeba proto, abys o tom sám popřemýšlel. Takže dám jenom otázky: Je nutné procházet i sudá čísla?… nový
Wikan 14.02.2016 11:09
Wikan
len mu dam este tip na take magicke slovicko - odmocnina. poslední
MM.. 14.02.2016 11:14
MM..

akoze nie
napisal som toto pre jedno cislo a funguje to spravne

inp = int(input('write number for prime check: '))
divisor = 2

while True:
    if divisor < inp:
        if inp % divisor == 0:
            print('number is not prime')
            break
        else:
            divisor = divisor + 1
    elif divisor == inp:
        print('number is prime !')
        break

funguje to takto

inp = int(input('write number for all primes up to(included): '))
divisor = 2
primes = []

for num in range(2, inp+1):
    while divisor <= num:   
        if divisor == num:
            primes.append(num)
            divisor = 2
            break
        elif divisor < num:
            if num % divisor == 0:
                divisor = 2
                break
            else:
                divisor = divisor + 1
print(primes)        

pri mojich zaciatocnickych znalostiach som rad ze to vobec mam. a optimalizacia ma netrapi a nepoznam pokrocile veci tak darmo mi ukazes ked som sa s tym este nestretol.

ale fajne to je takto, ne ?

fantazia
este by sa dalo osekat(else tam netreba). takto to vyzera vo finale:

inp = int(input('write number for all primes up to(included): '))
primes = []
for num in range(2, inp+1):
    divisor = 2
    while divisor < num:   
        if num % divisor == 0:
            break
        divisor = divisor + 1
    if divisor == num:    
        primes.append(num)
print(primes)

No třeba proto, abys o tom sám popřemýšlel. Takže dám jenom otázky:
Je nutné procházet i sudá čísla?
Je nutné při hledání dělitelů čísla X procházet čísla v celém intervalu <2, X)? Nestačil by nějaký kratší?
Je nutné procházet všechna čísla z daného intervalu? Nestačila by pouze některá?

Zpět do poradny Odpovědět na původní otázku Nahoru