2015-10-13 138 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

相关问题