Python循环质数

数字197可以被称为循环素数,因为197的三个数位循环移位后的数字:197,971,719均为素数。100以内这样的数字包括13个,2,3,5,7,11,13,17,31,37,71,73,79,97。要求任意正整数n以内一共有多少个这样的循环素数。

循环移位方法

  • 字符串切片

判断循环素数的优化

  • 范围为2-sqrt(n)
  • 判断一个n位数是否是循环素数的过程相当于判断n个数是否是循环素数的过程。只需判断其中一个数(取最小数)是否是循环素数。
  • 含有0,2,4,5,6,8(除个位数)的数一定不是循环素数
import math


def is_prime(x):
    flag = True
    for i in range(2, int(math.sqrt(x))+1):
        if x % i == 0:
            flag = False
            break
    return flag


def first_min(my_str):
    flag = True
    s = my_str
    for i in range(1, len(my_str)):
        s = rev_str(s)
        if int(s) < int(my_str):
            flag = False
            break
    return flag


def rev_str(my_str):
    length = len(my_str)
    my_str = my_str[1:length] + my_str[0]
    return my_str


n = int(input())
count = 0
for j in range(1, n):
    if j == 2:
        count += 1
    if j == 3:
        count += 1
    if j == 5:
        count += 1
    if j == 7:
        count += 1
    if j > 10:
        str_ = str(j)
        for m in str_:
            if m in ['0', '2', '4', '5', '6', '8']:
                break
        else:
            judge = 0
            if first_min(str_):
                jx = j
                for k in range(0, len(str_)):
                    if is_prime(jx):
                        if jx < n:
                            judge += 1
                    else:
                        judge = 0
                        break
                    rev = rev_str(str_)
                    if str_ != rev:
                        str_ = rev
                        jx = int(str_)
                    else:
                        break
            count += judge
print(count)
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。