Goldbach's assumption input: a even positive integer 'number' > 2 returns a list of two prime numbers whose sum is equal to 'number'
(number)
| 278 | |
| 279 | |
| 280 | def goldbach(number): |
| 281 | """ |
| 282 | Goldbach's assumption |
| 283 | input: a even positive integer 'number' > 2 |
| 284 | returns a list of two prime numbers whose sum is equal to 'number' |
| 285 | """ |
| 286 | |
| 287 | # precondition |
| 288 | assert isinstance(number, int) and (number > 2) and isEven(number), ( |
| 289 | "'number' must been an int, even and > 2" |
| 290 | ) |
| 291 | |
| 292 | ans = [] # this list will returned |
| 293 | |
| 294 | # creates a list of prime numbers between 2 up to 'number' |
| 295 | primeNumbers = getPrimeNumbers(number) |
| 296 | lenPN = len(primeNumbers) |
| 297 | |
| 298 | # run variable for while-loops. |
| 299 | i = 0 |
| 300 | j = 1 |
| 301 | |
| 302 | # exit variable. for break up the loops |
| 303 | loop = True |
| 304 | |
| 305 | while i < lenPN and loop: |
| 306 | j = i + 1 |
| 307 | |
| 308 | while j < lenPN and loop: |
| 309 | if primeNumbers[i] + primeNumbers[j] == number: |
| 310 | loop = False |
| 311 | ans.append(primeNumbers[i]) |
| 312 | ans.append(primeNumbers[j]) |
| 313 | |
| 314 | j += 1 |
| 315 | |
| 316 | i += 1 |
| 317 | |
| 318 | # precondition |
| 319 | assert ( |
| 320 | isinstance(ans, list) |
| 321 | and (len(ans) == 2) |
| 322 | and (ans[0] + ans[1] == number) |
| 323 | and isPrime(ans[0]) |
| 324 | and isPrime(ans[1]) |
| 325 | ), "'ans' must contains two primes. And sum of elements must been eq 'number'" |
| 326 | |
| 327 | return ans |
| 328 | |
| 329 | |
| 330 | # ---------------------------------------------- |
nothing calls this directly
no test coverage detected