【问题标题】:Finding all circular primes below a given number in python在python中查找低于给定数字的所有圆素数
【发布时间】:2020-05-17 12:47:36
【问题描述】:

我正在尝试编写一段代码,它将打印出低于给定数字的所有循环素数,但由于某种原因,我的代码打印的数字远远超出了我的限制。你觉得有什么办法可以解决吗?

from collections import deque
def gen_primes(upper):

    D = {}
    q = 2
    while q <= upper:
        if q not in D:
            yield q
            D[q * q] = [q]
        else:
            for p in D[q]:
                D.setdefault(p + q, []).append(p)
            del D[q]       
        q += 1 

def next_largest(n):
    k = len(str(n))
    return 10**k

def circular_primes(upper):
    circular = [] 

    primes = list(gen_primes(next_largest(upper)))  

    for prime in primes:
        string = str(prime)
        digits = deque(string)

        for rotation in range(1, upper):
            digits.rotate(1)

            if int("".join(digits)) not in primes:
                break
        else:
            circular.append(prime)

    return circular

print(circular_primes(200))

输出

[2, 3, 5, 7, 11, 13, 17, 31, 37, 71, 73, 79, 97, 113, 131, 197, 199, 311, 337, 373, 719, 733, 919, 
971, 991]

【问题讨论】:

  • 您将 next_largest 定义为 10**3 == 1000,因此您可以得到所有素数直到 1000

标签: python primes


【解决方案1】:

你可以只替换素数变量初始化

primes = list(gen_primes(upper))  

next_largest 函数将 200 的值 1000 作为 10**3 返回。

def next_largest(n):
    k = len(str(n))
    return 10**k

【讨论】:

  • 通过改变这样做,并不是所有的圆形素数都被检查,所以如果 upper=200 它只显示前 13 个素数
  • 是的。这就是你想要的对吗?你想找出从 1 到 200(上)的所有圆素数吗?
猜你喜欢
  • 1970-01-01
  • 2016-09-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-31
  • 2018-11-11
  • 1970-01-01
相关资源
最近更新 更多