# -*- coding: utf-8 -*-
"""
Created on Fri Aug 3 22:09:13 2018
定义一个 prime() 函数
求整数 n 以内(不包括n)的所有素数(1不是素数),
并返回一个按照升序排列的素数列表。
使用递归来实现一个二分查找算法函数bi_search(),
该函数实现检索任意一个整数在 prime() 函数生成的素数列表中位置(索引)的功能,
并返回该位置的索引值,若该数不存在则返回 -1。
@author: 金晓
"""
import math
##判断是否为素数
def is_prime(n):
for i in range(2,int(math.sqrt(n))+1):
if n%i == 0:
return False
return True
#求整数n以内(不包括n)的所有素数
def prime(n):
prime_list=[]
for i in range(2,n):
if is_prime(i):
prime_list.append(i)
prime_list.sort()
return prime_list
#本方法不是递归(--题目没看清,递归之后补上)
def bi_search(prime_list,num_tofind):
index = []
n =len(prime_list)
for i in num_tofind:
low = 0
high = n-1
while (low<=high):
mid = int((low+high)/2)
if i<prime_list[mid]:
high = mid-1
elif i>prime_list[mid]:
low = mid+1
else:
index.append(mid)
break
if low>high:
index.append(-1)
return index
num_tofind = []
max = int(input())
while True:
s = input()
if(s==''):
break
else:
num_tofind.append(int(s))
prime_list = prime(max)
index = bi_search(prime_list,num_tofind)
print(index)
结果展示: