Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Diskuze: prvočíselné dvojice

Aktivity
Avatar
Denisa Váňová:25.12.2019 23:53

Ahoj, jdu si pro radu jako úplná začátečnice :)

Nevím si úplně rady s tímto úkolem:
Je zadáno číslo n. Vypište všechny prvočíselné dvojice menší než n.
Prvočíselná dvojice je dvojice čísel p a p + 2, kde p i p + 2 je prvočíslo.

Zkusil jsem:

n = int(input("Zadejte číslo:"))

sito = [False, False] + [True]*(n-1)
seznam = list(range(n))

for i in range(2,n):
    if sito[i] == True:
        j = 2
        while i*j < n:
            sito[i*j] = False
            j = j+1
for i in range(n):
    for k in range(i+1, n):
        if (sito[i] == True) and (sito[k] == True):
            if (sito[i] + 2 == sito[k]):
                print(str(seznam[i])+ " " + str(seznam [k]))

Zkoušela jsem toto, ale tato část

if (sito[i] + 2 == sito[k]):

nefunguje.
Budu ráda za jakoukoliv pomoc, co vše dělám blbě, děkuji.

 
Odpovědět
25.12.2019 23:53
Avatar
Odpovídá na Denisa Váňová
Matúš Olejník:28.12.2019 16:49

Nerobím v Pythone, ale keďže vidím, že akosi tu nikto nepíše tak sa pokúsim pomôcť. Hádam, že sa to bude dať aj krajšie spraviť :) Tiež som zachoval použitie toho Eratosthenovho sita a upravil ten kód podľa ukážky vo wikipedii
Snáď funguje :D

#https://cs.wikipedia.org/wiki/Eratosthenovo_s%C3%ADto
def eratosthenovo_sito(n):
  n += 1
  sito = [True] * n

  for i in range(2, n):
    if sito[i]:
      for j in range(i*2, n, i):
        sito[j]=False

  primes=[]
  for i in range(2, n):
    if sito[i]:
      primes.append(i)
  return primes

primes = eratosthenovo_sito(200)
primes_len = len(primes)

for i in range(primes_len):
    if i + 1 < primes_len:
        if primes[i] + 2 == primes[i + 1]:
            print(str(primes[i]) + ", " + str(primes[i + 1]))
        else:
            if i + 2 < primes_len:
                if primes[i] + 2 == primes[i + 2]:
                    print(str(primes[i]) + ", " + str(primes[i + 2]))
Akceptované řešení
+20 Zkušeností
+2,50 Kč
Řešení problému
Nahoru Odpovědět
28.12.2019 16:49
/* I am not sure why this works but it fixes the problem */
Avatar
Denisa Váňová:1.1.2020 16:25

Moc děkuji za pomoc! :)

 
Nahoru Odpovědět
1.1.2020 16:25
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 3 zpráv z 3.