题目内容:
数字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
import math
n=int(raw_input(''))
count=0
x=2
while x<n:
for i in range(2,int(math.sqrt(x)+1)):
if x%i==0:
break
else:
if x<10:
count+=1
else:
p=x
true=1
while true:
m=1
q=p
while q>10:
yu=q%10
if yu==0:
true=0
break
q=q/10
m=m*10
if true==0:
break
q=(p%m)*10+q
for j in range(2,int(math.sqrt(q)+1)):
if q%j==0:
true=0
break
else:
p=q
if q==x:
count+=1
break
x+=1
print count
第一个for循环判断是否为素数→如果不是素数直接break;如果是素数再判断素数大小→素数小于10,直接统计+1;素数大于10,每次把第一位移动到最后一位,判断是否为素数,知道移动后的数字等于移动前的数字时,统计+1.(在素数移动循环时,对10取余,一旦取余等于0,立即跳出while语句)
素数中间如果有0,需要加判断条件,无需再循环移位