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


其中需要拆分一个整数各位并进行重新组合,不过这里的组合只是循环移位就可以了。本题目我的实现代码如下

#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')]
发布了11 篇原创文章 · 获赞 18 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/wangke0809/article/details/70162026