我们应该选择所有在反转时是不同 素数的素数(因此应该丢弃回文素数)。
例如:13、17 是素数,反过来分别是 31、71,它们也是素数,所以 13 和 17 是“emirps”。但素数 757、787、797 是回文素数,这意味着反转后的数与原来的数相同,因此它们不被视为“emirps”,应该被丢弃。
你的任务
创建一个接收一个参数的函数n
,作为上限,并返回以下数组:
[number_of_emirps_below_n, largest_emirp_below_n, sum_of_emirps_below_n]
例子
find_emirp(10)
[0, 0, 0] ''' no emirps below 10 '''
find_emirp(50)
[4, 37, 98] ''' there are 4 emirps below 50: 13, 17, 31, 37; largest = 37; sum = 98 '''
find_emirp(100)
[8, 97, 418] ''' there are 8 emirps below 100: 13, 17, 31, 37, 71, 73, 79, 97; largest = 97; sum = 418 '''
ps:不要使用素数测试。它会使你的代码非常慢。使用素数生成器或一系列素数生成器创建一组素数。请记住,在集合中搜索比在排序列表或数组中搜索更快
题目难度:一般
题目来源:https://www.codewars.com/kata/55de8eabd9bef5205e0000ba
def find_emirp(n: int) -> list:
# your code goes here
return #[amount of emirps in the range(13, n + 1), largest emirp smaller than n, sum of all the emirps of this range.
assert find_emirp(10) == [0, 0, 0]
assert find_emirp(50) == [4, 37, 98]
assert find_emirp(100) == [8, 97, 418]