Advertisement
informaticage

Goldbach's conjecture first improvement

Mar 9th, 2021
959
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.83 KB | None | 0 0
  1. # n => isprime => bool ( true se รจ primo, false altrimenti )
  2. def isPrime(n):
  3.     numberOfDividents = 0
  4.     import math
  5.     if(n == 2):
  6.         return True
  7.  
  8.     if(n % 2 == 0):
  9.         return False
  10.  
  11.     square = int(math.sqrt(n)) + 1
  12.     for div in range(2, square):
  13.         if(n % div == 0):
  14.             return False
  15.     return True
  16.  
  17. # list every prime from 'from' to 'to'
  18. # ex, getPrimes (1, 9) => [1,2,3,5,7]
  19. def getPrimes(begin, end):
  20.     foundPrimes = []
  21.     for k in range(begin, end + 1):
  22.         if(isPrime(k)):
  23.             foundPrimes.append(k)
  24.  
  25.     return foundPrimes
  26.  
  27.  
  28. def binary_search(arr, low, high, x):
  29.  
  30.     # Check base case
  31.     if high >= low:
  32.  
  33.         mid = (high + low) // 2
  34.  
  35.         # If element is present at the middle itself
  36.         if arr[mid] == x:
  37.             return mid
  38.  
  39.         # If element is smaller than mid, then it can only
  40.         # be present in left subarray
  41.         elif arr[mid] > x:
  42.             return binary_search(arr, low, mid - 1, x)
  43.  
  44.         # Else the element can only be present in right subarray
  45.         else:
  46.             return binary_search(arr, mid + 1, high, x)
  47.  
  48.     else:
  49.         # Element is not present in the array
  50.         return -1
  51.  
  52. def sortByFirstElement(element):
  53.     return int(element.split('+')[0])
  54.  
  55. def goldbach_partitions(n):
  56.     primes_to_try = getPrimes(2, n - 1)
  57.  
  58.     if(n % 2 != 0):
  59.         return []
  60.  
  61.     adding_to_n = []
  62.     for i in primes_to_try:
  63.         if(binary_search(primes_to_try, 0, len(primes_to_try) - 1, n - i) != -1):
  64.             if not ((str(i) + '+' + str(n - i) in adding_to_n) or (str(n - i) + '+' + str(i) in adding_to_n)):
  65.                 adding_to_n.append(
  66.                     str(i) + '+' + str(n - i)
  67.                 )
  68.  
  69.     return sorted(adding_to_n, key=sortByFirstElement)
  70.  
  71.  
  72. print(goldbach_partitions(26))
  73.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement