今天写一个判断是否为循环素数的题,题干如下
题目内容:
数字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
其中需要拆分一个整数各位并进行重新组合,不过这里的组合只是循环移位就可以了。本题目我的实现代码如下
#python 2.7可用,3.0+需要更改input 和 print()
import math
def split(num):
data = []
while num != 0:
data.append(num % 10)
num //= 10
return data
def combine(data):
return_data = []
lens = len(data)
for i in range(lens):
sum = 0
for j in range(lens):
index = i+j
if index >= lens:
index -=lens
sum += data[index]*10**j
return_data.append(sum)
return return_data
def isPrime(n):
if n <= 1:
return False
for i in range(2, int(math.sqrt(n)) + 1):
if n % i == 0:
return False
return True
def isCirclePrime(n):
if isPrime(n):
for i in combine(split(n)):
if not isPrime(i):
return False
break
return True
else:
return False
n = int(raw_input())
count = 0
for i in range(1,n):
if isCirclePrime(i):
count +=1
print count
做这个题的时候联想到了一个问题,如何组合排列n个字符?
本来想动手写算法,但转念一想,万能的python说不定已经实现了呢?
百度之:
import itertools
lists = ['a','b','c','d']
for i in range(1,len(lists)+1):
print (list(itertools.permutations(lists,i)))#排列,和顺序有关
print (list(itertools.combinations(lists,i)))#组合,和顺序无关
输出:
[('a',), ('b',), ('c',), ('d',)]
[('a',), ('b',), ('c',), ('d',)]
[('a', 'b'), ('a', 'c'), ('a', 'd'), ('b', 'a'), ('b', 'c'), ('b', 'd'), ('c', 'a'), ('c', 'b'), ('c', 'd'), ('d', 'a'), ('d', 'b'), ('d', 'c')]
[('a', 'b'), ('a', 'c'), ('a', 'd'), ('b', 'c'), ('b', 'd'), ('c', 'd')]
[('a', 'b', 'c'), ('a', 'b', 'd'), ('a', 'c', 'b'), ('a', 'c', 'd'), ('a', 'd', 'b'), ('a', 'd', 'c'), ('b', 'a', 'c'), ('b', 'a', 'd'), ('b', 'c', 'a'), ('b', 'c', 'd'), ('b', 'd', 'a'), ('b', 'd', 'c'), ('c', 'a', 'b'), ('c', 'a', 'd'), ('c', 'b', 'a'), ('c', 'b', 'd'), ('c', 'd', 'a'), ('c', 'd', 'b'), ('d', 'a', 'b'), ('d', 'a', 'c'), ('d', 'b', 'a'), ('d', 'b', 'c'), ('d', 'c', 'a'), ('d', 'c', 'b')]
[('a', 'b', 'c'), ('a', 'b', 'd'), ('a', 'c', 'd'), ('b', 'c', 'd')]
[('a', 'b', 'c', 'd'), ('a', 'b', 'd', 'c'), ('a', 'c', 'b', 'd'), ('a', 'c', 'd', 'b'), ('a', 'd', 'b', 'c'), ('a', 'd', 'c', 'b'), ('b', 'a', 'c', 'd'), ('b', 'a', 'd', 'c'), ('b', 'c', 'a', 'd'), ('b', 'c', 'd', 'a'), ('b', 'd', 'a', 'c'), ('b', 'd', 'c', 'a'), ('c', 'a', 'b', 'd'), ('c', 'a', 'd', 'b'), ('c', 'b', 'a', 'd'), ('c', 'b', 'd', 'a'), ('c', 'd', 'a', 'b'), ('c', 'd', 'b', 'a'), ('d', 'a', 'b', 'c'), ('d', 'a', 'c', 'b'), ('d', 'b', 'a', 'c'), ('d', 'b', 'c', 'a'), ('d', 'c', 'a', 'b'), ('d', 'c', 'b', 'a')]
[('a', 'b', 'c', 'd')]