Python的主要安排
我们必须找到1到n的排列数,因此素数放在素数索引处。答案可能很大,以10^9+7为模返回答案。因此,如果n=5,则输出将为12。因此将有12个排列。一个可能的排列为[1,2,5,4,3],一个无效的排列为[5,2,3,4,1],因为5放置在索引1处,而不是质数。
为了解决这个问题,我们将遵循以下步骤-
定义一个称为getNum的方法,如下所示-
素数:=所有素数从2到100的列表
设置我:=0
而我<主要列表的长度
如果prime[i]>n,则返回i
我:=我+1
素数的返回长度
实际问题将解决如下
x:=getNum(n),p:=1,m:=10^9+7
对于我:=x降至0
p:=p*我
p:=pmodm
对于i:=n–x降至0
p:=p*我
p:=pmodm
返回p
示例
让我们看下面的实现以更好地理解-
class Solution(object): def getNum(self,n): primes = [2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97] i = 0 while i < len(primes): if primes[i]>n: return i i+=1 return len(primes) def numPrimeArrangements(self, n): """ :type n: int :rtype: int """ x = self.getNum(n) p = 1 m = 1000000000+7 for i in range(x,0,-1): p*=i p%=m for i in range(n-x,0,-1): p*=i p%=m return p ob1 = Solution()print(ob1.numPrimeArrangements(100))
输入项
100
输出结果
682289015