使用 for 循环和 max 减去给定两个列表的最近素数
Subtracting the Nearest Prime Given Two Lists using for loop and max
我有两个列表:(1) 素数列表 (prime_list) 和 (2) 奇数列表 (odd_list)。我想在每个奇数下找到最高素数,但我遇到了一些困难。例如,对于奇数 99,我想减去 97。
我一直在尝试使用 "for loop" 和最大值。我能掌握的那些概念。我确信还有其他方法,但我只是更加困惑。参见示例:How to find the nearest prime number in an array, to another number in that array?
def max_prime():
for each_odd in odd_list:
print(max(prime_list))
如果我添加 (
我怎样才能做到这一点?是否可以使用 max 和 for 循环?
如果您不担心速度,只是希望它易于理解,您可以执行以下操作:(我将 each_odd 更改为 curr_odd 以使其更具可读性)
closestAbove = 0 #Defining a variable for the closest larger prime
for curr_odd in odd_list:
for curr_prime in prime_list: #Testing each prime for each odd number
if (closestAbove == 0) or (curr_prime > curr_odd and curr_prime < closestAbove):
closestAbove = curr_prime
#This test says if the number is more than the odd number
#and less than the number we had saved before, we want it
print(str(curr_odd) + " : " + str(closestAbove))
closestAbove = 0 #Reset
一旦您的素数列表按排序顺序排列,您就可以平分,只需从返回的索引中减去 1 并从列表中获取该素数:
from bisect import bisect_left
odd_list = range(3, 50, 2)
primes = [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71]
for each_odd in odd_list:
ind = bisect_left(primes, each_odd)
print(each_odd, primes[ind - 1])
输出:
(3, 2)
(5, 3)
(7, 5)
(9, 7)
(11, 7)
(13, 11)
(15, 13)
(17, 13)
(19, 17)
(21, 19)
(23, 19)
(25, 23)
(27, 23)
(29, 23)
(31, 29)
(33, 31)
(35, 31)
(37, 31)
(39, 37)
(41, 37)
(43, 41)
(45, 43)
(47, 43)
(49, 47)
我有两个列表:(1) 素数列表 (prime_list) 和 (2) 奇数列表 (odd_list)。我想在每个奇数下找到最高素数,但我遇到了一些困难。例如,对于奇数 99,我想减去 97。
我一直在尝试使用 "for loop" 和最大值。我能掌握的那些概念。我确信还有其他方法,但我只是更加困惑。参见示例:How to find the nearest prime number in an array, to another number in that array?
def max_prime():
for each_odd in odd_list:
print(max(prime_list))
如果我添加 (
我怎样才能做到这一点?是否可以使用 max 和 for 循环?
如果您不担心速度,只是希望它易于理解,您可以执行以下操作:(我将 each_odd 更改为 curr_odd 以使其更具可读性)
closestAbove = 0 #Defining a variable for the closest larger prime
for curr_odd in odd_list:
for curr_prime in prime_list: #Testing each prime for each odd number
if (closestAbove == 0) or (curr_prime > curr_odd and curr_prime < closestAbove):
closestAbove = curr_prime
#This test says if the number is more than the odd number
#and less than the number we had saved before, we want it
print(str(curr_odd) + " : " + str(closestAbove))
closestAbove = 0 #Reset
一旦您的素数列表按排序顺序排列,您就可以平分,只需从返回的索引中减去 1 并从列表中获取该素数:
from bisect import bisect_left
odd_list = range(3, 50, 2)
primes = [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71]
for each_odd in odd_list:
ind = bisect_left(primes, each_odd)
print(each_odd, primes[ind - 1])
输出:
(3, 2)
(5, 3)
(7, 5)
(9, 7)
(11, 7)
(13, 11)
(15, 13)
(17, 13)
(19, 17)
(21, 19)
(23, 19)
(25, 23)
(27, 23)
(29, 23)
(31, 29)
(33, 31)
(35, 31)
(37, 31)
(39, 37)
(41, 37)
(43, 41)
(45, 43)
(47, 43)
(49, 47)