Python中的排列和组合

    xiaoxiao2021-04-14  36

    今天写一个判断是否为循环素数的题,题干如下


    题目内容: 数字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')]
    转载请注明原文地址: https://ju.6miu.com/read-669973.html

    最新回复(0)