2015-10-13 4 views
-2

Я пытаюсь найти 2 простых числа, которые суммируются до определенного целого N, указанного пользователем. Но я получаю эту ошибку ОМППочему я превысил лимит памяти?

def is_prime(n): 
    if n == 2: 
     return True 
    if n%2 == 0 or n <= 1: 
     return False 
    sqr = int(n**0.5) + 1 
    for divisor in range(3, sqr, 2): 
     if n%divisor == 0: 
      return False 
    return True 

class Solution: 
    # @param A : integer 
    # @return a list of integers 
    def primesum(self, A): 
     #Creating the list of prime numbers 
     h_prime ={} 
     # Initializing the hash table 
     # looking for the prime numbers 
     for i in range (2, long (A)): 
      if (is_prime(i)): 
       h_prime [i] = A-i; 
     # Checking if the compliment is also a prime 
     #We go through it element by element 
     for key in h_prime: 
      if key in h_prime and A-key in h_prime: 
       my_list = [ key, A-key] 
       return my_list 
+0

Как вы узнали, что предел памяти превышен? Вы получаете сообщение об ошибке? –

+0

Ваш записанный код никогда не выполняется, так как вы никогда не вызываете функцию. Пожалуйста, дайте нам свой фактический [минимальный, полный, проверяемый пример] (http://stackoverflow.com/help/mcve). –

+0

Какова ценность 'A'? –

ответ

0

Поскольку вопрос Аскер, кажется, не хотят, чтобы уточнить, я отвечу в Go, так как я практикуя его в последнее время!

package main 

import (
    "fmt" 
    "math" 
) 

func isPrime(n int) bool { 
    if n == 2 { 
     return true 
    } else if n%2 == 0 || n <= 1 { 
     return false 
    } else { 
     sqrt := int(math.Floor(math.Sqrt(float64(n)))) + 1 
     for divisor := 3; divisor < sqrt; divisor += 2 { 
      if n%divisor == 0 { 
       return false 
      } 
     } 
     return true 
    } 

} 

func PrimesSum(n int) (int, int, error) { 
    primes := make(map[int]struct{}) 
    for i := 2; i <= n; i++ { 
     if isPrime(i) { 
      primes[i] = struct{}{} 
     } 
    } 
    for primeOne, _ := range primes { 
     primeTwo := n - primeOne 
     _, ok := primes[primeTwo] 
     if ok { 
      return primeOne, primeTwo, nil 
     } 
    } 
    return 0, 0, fmt.Errorf("No prime sum for %v", n) 
} 

func main() { 
    var i int 
    fmt.Println("Enter a number to check: ") 
    fmt.Print(">> ") 
    _, err := fmt.Scan(&i) 
    if err == nil { 
     primeOne, primeTwo, err := PrimesSum(i) 
     if err == nil { 
      fmt.Printf("%v, %v\n", primeOne, primeTwo) 
     } else { 
      fmt.Print(err) 
     } 
    } else { 
     fmt.Printf("Invalid input, %v\n", err) 
    } 
} 
+0

Спасибо вам большое Адам ! И извините за задержку. Мой код на самом деле правильный логически, но он просто превышает память, выделенную платформой в «Interviewbit», поэтому я ищу способы улучшить использование памяти. – Chada

Смежные вопросы