定义一个 prime() 函数求整数 n 以内(不包括n)的所有素数),并返回一个按照升序排列的素数列表。使用递归来实现一个二分查找算法函数bi_search(),该函数实现检索任意一个整数。

时间:2024-03-20 20:59:51

# -*- 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)
        
结果展示:

定义一个 prime() 函数求整数 n 以内(不包括n)的所有素数),并返回一个按照升序排列的素数列表。使用递归来实现一个二分查找算法函数bi_search(),该函数实现检索任意一个整数。