如何在Python中在1-100范围内取消选择以7结尾的质数?

0 投票
3 回答
985 浏览
提问于 2025-04-17 15:16
list = []

for i in range(2,100):
    primeflag=True
    for num in list:
        if(i%num==0):
            primeflag=False

    if(primeflag):
        print str(i)
        list.append(i)
print list

我应该怎么做才能去掉那些以7结尾的质数?

3 个回答

0

在Python中,你可以使用 str 函数把任何数字转换成字符串。

所以,你可以这样做:-

num  = 17
str_num = str(num)

接下来,为了检查最后一位数字是否不等于7,你可以访问字符串的最后一个字符,并把它和 '7' 比较。要访问最后一个字符,可以用 str_num[-1]

所以,你需要的条件是:-

if str_num[-1] != '7':
    # don't add it to list

另外,你的内层循环似乎有点问题。你在用 i 除以 list 中的每一个数字来检查余数,其实你应该只检查到 i ** 0.5。此外,你可以利用 for 循环的 else 部分,这样就不需要使用一个 boolean flag。所以,你修改后的代码应该是这样的:

for i in range(2,100):
    for num in range(2, int(i ** 0.5) + 1):
        if(i % num == 0):
            break

    else:
        if str(i)[-1] != '7':
            my_list.append(i)

forelse 会在 for 循环执行完毕且没有中断时执行。


虽然这和实际问题没有直接关系,但你可以考虑了解一下 埃拉托斯特尼筛法 算法,它可以用来生成给定范围内的质数。

1

有很多方法可以实现你想做的事情,你需要找到最适合你具体问题的方法。

一种解决思路是:

  • 定义一个方法 isprime(n) - 你可以自己想办法实现,或者在网上查找相关的实现,我相信你能找到。

然后:

yourlist = [x for x in xrange(2, 100) if isprime(x) and x % 10 != 7]

这是一个不错的初步方法,当然还有更复杂的选项,比如使用生成器、改进的埃拉托斯特尼筛法等等,但在你实现一个可行的方案后,可以再去探索这些其他选项。

1

把你的数字对10取余,然后检查一下结果是不是7,只有在结果是7的情况下,才把这个数字加到最后的列表里。

if(i % 10 != 7):
    print str(i)
    list.append(i)

撰写回答