关于#python#的问题:python 输入一个正整数和一个n,求比该正整数的第n个小的素数

python 输入一个正整数和一个n,求比该正整数的第n个小的素数。
我写的代码:

x=int(input("请输入一个正整数"))
n=int(input("请输入一个数:"))
s=[]
d=0
for a in range(1,x):
 for i in range(2,a):
    if a%i==0:
        d+=1
    if d==0:
        s.append(a)
    continue

s.reverse()
print(s)


但是结果不正确 求告知哪里有问题吗

img

你的素数的判断是错误的。

n = int(input("请输入一个数:"))
count = 0
i = 2
while count < n:
    d = 0
    for j in range(2, i):
        if i % j == 0:
            d += 1
    if d == 0:
        count += 1
    i += 1

print(i - 1)

  • 帮你找了个相似的问题, 你可以看下: https://ask.csdn.net/questions/7674092
  • 这篇博客也不错, 你可以看下Python输入整数n,求斐波拉契数列第n个数
  • 除此之外, 这篇博客: Python-查找第n个丑数中的 3.算法 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • # coding=utf-8
    
    """
    question:
    质因子只包含2、3、5中的一个或多个数称为丑数,要求按从小到大的顺序找到第 n 个丑数
    1 为第一个丑数
    """
    
    
    def find_num(n):
        if n < 1:
            return 0
    
        # 丑数列表初始化
        num_list = [1]
    
        t2 = t3 = t5 = 0
        """
        ti 的定义:
        1.对任意的 t < ti, i * num_list[t] <= num_list[-1]
        2.对任意的 t > ti,i * num_list[t] > num_list[-1]
        """
        while len(num_list) < n:
            num_list.append(min(num_list[t2] * 2, num_list[t3] * 3, num_list[t5] * 5))
    
            # 重新查找 t2、t3、t5
            while 2 * num_list[t2] <= num_list[-1]:
                t2 += 1
    
            while 3 * num_list[t3] <= num_list[-1]:
                t3 += 1
    
            while 5 * num_list[t5] <= num_list[-1]:
                t5 += 1
    
        return num_list[-1]
    
    
    if __name__ == '__main__':
        for i in range(1, 20):
            print(find_num(i))
    

     

  • 您还可以看一下 裴帅帅老师的Python入门编程100例课程中的 Python计算前N个数字的平方和小节, 巩固相关知识点