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