在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★ Find the smallest prime palindrome greater than or equal to Recall that a number is prime if it's only divisors are 1 and itself, and it is greater than 1. For example, 2,3,5,7,11 and 13 are primes. Recall that a number is a palindrome if it reads the same from left to right as it does from right to left. For example, 12321 is a palindrome. Example 1: Input: 6
Output: 7
Example 2: Input: 8
Output: 11
Example 3: Input: 13
Output: 101
Note:
求出大于或等于 回顾一下,如果一个数大于 1,且其因数只有 1 和它自身,那么这个数是素数。 例如,2,3,5,7,11 以及 13 是素数。 回顾一下,如果一个数从左往右读与从右往左读是一样的,那么这个数是回文数。 例如,12321 是回文数。 示例 1: 输入:6 输出:7 示例 2: 输入:8 输出:11 示例 3: 输入:13 输出:101 提示:
Runtime: 160 ms
Memory Usage: 19.4 MB
1 class Solution { 2 func primePalindrome(_ N: Int) -> Int { 3 if N < 10{ 4 let resDic = [2,2,2,3,5,5,7,7,11,11] 5 return resDic[N] 6 } 7 let s = String(N) 8 var half = Int(s.prefix(s.count/2)) ?? 1 9 var hasMidHandle = s.count % 2 == 1 10 11 while 1==1 { 12 let maxHalf = maxHalf9(half) 13 if !hasMidHandle { 14 for h in half...maxHalf{ 15 let tail = String(String(h).reversed()) 16 let num = Int(String(h)+tail) ?? 1 17 if num < N { continue } 18 if isPrimer(num){ 19 return num 20 } 21 } 22 hasMidHandle = true 23 half = (maxHalf + 1) / 10 24 } 25 for h in half...maxHalf{ 26 let tail = String(String(h).reversed()) 27 for m in 0...9{ 28 let num = Int(String(format: "%d%d",h,m)+tail) ?? 1 29 if num < N { continue } 30 if isPrimer(num){ 31 return num 32 } 33 } 34 } 35 hasMidHandle = false 36 half = maxHalf + 1 37 } 38 } 39 40 // 123 -> 999 41 func maxHalf9(_ num:Int) -> Int { 42 var n = 1 43 for _ in 0..<String(num).count{ 44 n *= 10 45 } 46 return n-1 47 } 48 49 func isPrimer(_ num:Int) -> Bool{ 50 if num % 2 == 0 { return false } 51 let top = Int(sqrt(Double(num))) 52 var i = 3 53 while i <= top{ 54 if num % i == 0{ return false } 55 i += 2 56 } 57 return true 58 } 59 } Runtime: 896 ms
Memory Usage: 18.6 MB
1 class Solution { 2 func primePalindrome(_ N: Int) -> Int { 3 if 8 <= N && N <= 11 4 { 5 return 11 6 } 7 for x in 1..<100000 8 { 9 var s:String = String(x) 10 var r:String = String(s.reversed()) 11 var y:Int = Int(s + r.subString(1)) ?? 0 12 if y >= N && isPrime(y) {return y} 13 } 14 return -1 15 } 16 17 func isPrime(_ x:Int) -> Bool 18 { 19 if x < 2 || x % 2 == 0 {return x == 2} 20 var i:Int = 3 21 while(i * i <= x) 22 { 23 if x % i == 0 24 { 25 return false 26 } 27 i += 2 28 } 29 return true 30 } 31 } 32 33 extension String { 34 // 截取字符串:从index到结束处 35 // - Parameter index: 开始索引 36 // - Returns: 子字符串 37 func subString(_ index: Int) -> String { 38 let theIndex = self.index(self.endIndex, offsetBy: index - self.count) 39 return String(self[theIndex..<endIndex]) 40 } 41 }
|
请发表评论