来自网易云课堂Python程序设计第三周作业的一道题
题目内容:
数字197可以被称为循环素数,因为197的三个数位循环移位后的数字:197,971,719均为素数。100以内这样的数字包括13个,2,3,5,7,11,13,17,31,37,71,73,79,97。要求任意正整数n以内一共有多少个这样的循环素数。
输入格式:
一个正整数n。
输出格式:
n以内循环素数的数目。
输入样例:
100
输出样例:
13
时间限制:2000ms内存限制:32000kb
老师给出两个数据,第一次提交一个TLE,一个WA;第二次重写了代码,一个OLE,一个AC
第二次代码如下:
Python
import math
n=raw_input()
m=len(n) #求出所需最大素数的位数
n=int(n)
prime=[z for z in range(2,10**m+1)]
def eratosthenes(n): #埃式筛素数
m=int(math.sqrt(n))
for i in range(2,m+1):
if i in prime:
for j in prime:
if j!=i and j%i==0:
prime.remove(j)
else:
continue
eratosthenes(10**m)
#输入的是个m位数,就需要10的m次方内的素数表
def circle_number(n): #列举循环数
list=[n,]
m=len('%d' %n) #求出当前数的位数
for i in range(1,m): #m位数就有m-1个循环数
x=list[i-1]/(10**(m-1))+list[i-1]%(10**(m-1))*10
list.append(x)
return list
cnt=0
for i in range(2,n+1):
list1=circle_number(i)
k=0 #记录list1中素数个数
for j in list1:
if j in prime:
k+=1
continue
else:
break
if k==len(list1): #全部是素数则加1
cnt+=1
print cnt