Skip to content

Instantly share code, notes, and snippets.

@Maharramoff
Created November 24, 2018 18:01
Show Gist options
  • Save Maharramoff/56fbe131cabf3971023dcde3f4ad2e7e to your computer and use it in GitHub Desktop.
Save Maharramoff/56fbe131cabf3971023dcde3f4ad2e7e to your computer and use it in GitHub Desktop.
Updated Version
import math
def countSophieGermain(n, num = 0):
# Cüt olmayan ədədlərin potensial Sophie Germain ola biləcəyi üçün, n + 1 edirik.
n += 1 if n % 2 != 0 or n == 2 else 0
size = (n * 2 + 1)
array = [True] * size
# N < 5 olduqda cavabı dərhal qaytarırıq.
array[0] = array[1] = array[4] = False
if(n < 5):
return array[:n].count(True)
# Maraqlı məqam. 6-dan etibarən bütün cüt ədədləri dərhal false edirək massivi artıq elementlərdən azad edirik.
for i in range(6, n, 2):
array[i] = False
# Cütləri dərhal çıxdaş etdik deyə, sadəcə 3-dən başlayaraq ancaq tək ədədləri yoxlamaq kifayət edir.
for i in range(3, int(math.sqrt(size)), 2):
if array[i]:
for j in range (i * i, size, i * 2):
array[j] = False
# Daha bir maraqlı məqam. 5-dən başlayaraq bütün sadə ədədlər mütləq 6n+1 və 6n-1 şərtini ödəyən ədədlərdir. Ona görə də steplərin sayını azalda bilərik.
v = 2
i = 5
while (i < n):
if array[i] and array[2 * i + 1]:
num += 1
i += v
v ^= 6 # və ya v = 6 - v
return num + 2
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment