2015-10-13 29 views
-2

我正試圖找到2個素數總和爲某個整數N,由用戶指定。但我得到MLE爲什麼我的內存超出限制?

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

這個錯誤,因爲問題提問者似乎並不想澄清,我會在去回答,因爲我最近練了!

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

非常感謝Adam !併爲延遲感到抱歉。 我的代碼實際上在邏輯上是正確的,但它超過了平臺在「Interviewbit」中分配的內存,這就是爲什麼我正在尋找方法來改善內存使用情況。 – Chada

相關問題