zoukankan      html  css  js  c++  java
  • 【leetcode】1175. Prime Arrangements

    题目如下:

    Return the number of permutations of 1 to n so that prime numbers are at prime indices (1-indexed.)

    (Recall that an integer is prime if and only if it is greater than 1, and cannot be written as a product of two positive integers both smaller than it.)

    Since the answer may be large, return the answer modulo 10^9 + 7.

    Example 1:

    Input: n = 5
    Output: 12
    Explanation: For example [1,2,5,4,3] is a valid permutation, but [5,2,3,4,1] is not because the prime number 5 is at index 1.
    

    Example 2:

    Input: n = 100
    Output: 682289015
    

    Constraints:

    • 1 <= n <= 100

    解题思路:题目不难,对于给定一个正整数n,很容易可以求出在1~n这个区间有几个素数。假设素数有x个,x个素数占据x的位置,其排列方式的总和是x!;同理非素数有(n-x)个,那么这些非素数的排列方式就有(n-x)!个,两者的乘积即为最终的答案。

    代码如下:

    class Solution(object):
        def numPrimeArrangements(self, n):
            """
            :type n: int
            :rtype: int
            """
            prime = [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]
            import bisect
            prime_count = bisect.bisect_right(prime,n)
            no_prime_count = n - prime_count
            def calc(num):
                factorial = 1
                for i in range(1, num + 1):
                    factorial = factorial * i
                return factorial
    
            total = calc(prime_count) * calc(no_prime_count)
            return total % (10**9 + 7)
  • 相关阅读:
    选择排序的C、C++实现
    冒泡排序的C、C++实现
    Node.js使用UDP通讯
    Node.js使用TCP通讯
    栈的C语言实现
    顺序表的C、C++实现
    vim的几种模式&快捷键
    ubuntu安装discourse论坛----结合在apache服务上建立虚拟主机
    Ubuntu下使用mail命令发送邮件
    深入解读EOS源代码之——区块链内核
  • 原文地址:https://www.cnblogs.com/seyjs/p/11475209.html
Copyright © 2011-2022 走看看