Guest User

Untitled

a guest
Aug 22nd, 2018
161
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.44 KB | None | 0 0
  1. from math import sqrt
  2. from datetime import datetime
  3.  
  4. def generator_liczb_pierwszych(zakres):
  5.  
  6.     '''
  7.    Funkcja generujaca liczby pierwsze poprzez sprawdzenie podzielnosci. Algorytm ulepszony
  8.    w oparciu o: https://eduinf.waw.pl/inf/alg/001_search/0010.php
  9.    :param zakres: Gorna granica zakresu w ktorym wyszukiwane beda liczby
  10.    :return: Tuple: [0] - ilosc liczb pierwszych w przedziale,
  11.                    [1] - lista liczb pierwszych z przedzialu
  12.    '''
  13.  
  14.     lista_p = [2,3]
  15.     liczba_p = len(lista_p)               # bo dwa i trzy jest pierwsze
  16.  
  17.     for i in range(5,zakres,2):
  18.  
  19.         flaga_d = False         #flaga informujaca o tym czy liczba jest pierwsza
  20.         flaga_k = False         #flaga informujaca o tym czy liczba jest podzielna przez 6k+0,2,3
  21.         k = i//6
  22.  
  23.         for j in range(1,k+1):
  24.             if i%(j*6) == 0 or i%(j*6+2) == 0 or i%(j*6+3) == 0:
  25.                 flaga_k = True
  26.                 break
  27.         if flaga_k: continue
  28.  
  29.         for czynnik in lista_p:
  30.  
  31.             if czynnik>int(sqrt(i)):
  32.                 break
  33.  
  34.             else:
  35.                 if i%czynnik == 0:
  36.                     flaga_d = True
  37.  
  38.         if flaga_d == False:
  39.  
  40.             lista_p.append(i)
  41.             liczba_p = len(lista_p)
  42.  
  43.     return liczba_p, lista_p
  44.  
  45. startTime = datetime.now()
  46.  
  47. liczby_pierwsze = generator_liczb_pierwszych(1000000)
  48. print(liczby_pierwsze[0])
  49.  
  50. print(datetime.now() - startTime)
Advertisement
Add Comment
Please, Sign In to add comment