这是小川的第413次更新,第446篇原创

看题和准备

今天介绍的是LeetCode算法题中Easy级别的第264题(顺位题号是1175)。返回1到n的排列数,以使质数处于质数索引(索引从1开始)。(请记住,当且仅当整数大于1,并且不能将其写为两个均小于它的正整数的乘积,它才是质数。)由于答案可能很大,因此请以10^9 + 7为模返回答案。

例如:

输入:n = 5
输出:12
说明:[1,2,5,4,3]是有效的排列,但是[5,2,3,4,1]并不是,因为素数5在索引1处。

输入:n = 100
输出:682289015

注意

  • 1 ⇐ n ⇐ 100

解题

题目的意思是计算一个由1到n组成的数列中,质数恰好位于质数索引上的排列组合个数,本质上是一个数学问题。

结合n = 5的例子来看,1到5中,只有2,3,5是质数,1和4不是质数,因此排列质数就有3*2*1 = 6种可能,分别是:

[2,3,5],[2,5,3],[3,2,5],[3,5,2],[5,2,3],[5,3,2]

不是质数的1和4,只有两种可能,分别是

[1,4],[4,1]

因此,将质数和非质数组合起来,就是6*2 = 12种可能,分别是

[1,2,3,4,5],[1,2,5,4,3],[1,3,2,4,5],[1,3,5,4,2],[1,5,2,4,3],[1,5,3,4,2]
[4,2,3,1,5],[4,2,5,1,3],[4,3,2,1,5],[4,3,5,1,2],[4,5,2,1,3],[4,5,3,1,2]

因此,我们只需要计算出n中有多少个质数和非质数,再计算两者的阶乘即可,为了防止溢出,题目要求我们将计算结果对1000000007取余。

public int numPrimeArrangements(int n) {
int mod = 1000000007;
int primeNums = countPrime(n);
int nonPrimeNums = n - primeNums;
long result = 1;
for (int i=2; i<=primeNums; i++) {
result = (result*i)%mod;
}
for (int j=2; j<=nonPrimeNums; j++) {
result = (result*j)%mod;
}
return (int)result;
} /**
* 计算1到n中,质数(只能被1和自身整除)的个数
* @param n
* @return
*/
public int countPrime(int n) {
if (n <= 1) {
return 0;
}
int count = 0;
for (int i = 2; i <= n; i++) {
boolean flag = true;
for (int j = 2; j <= Math.sqrt(i); j++) {
if (i % j == 0) {
flag = false;
break;
}
}
if (flag) {
count++;
}
}
return count;
}

小结

算法专题目前已更新LeetCode算法题文章270+篇,公众号对话框回复【数据结构与算法】、【算法】、【数据结构】中的任一关键词,获取系列文章合集。

以上就是全部内容,如果大家有什么好的解法思路、建议或者其他问题,可以下方留言交流,点赞、留言、转发就是对我最大的回报和支持!

LeetCode.1175-质数排列(Prime Arrangements)的更多相关文章

  1. 【leetcode】1175. Prime Arrangements

    题目如下: Return the number of permutations of 1 to n so that prime numbers are at prime indices (1-inde ...

  2. [LeetCode] Arranging Coins 排列硬币

    You have a total of n coins that you want to form in a staircase shape, where every k-th row must ha ...

  3. LeetCode 77 Combinations(排列组合)

    题目链接:https://leetcode.com/problems/combinations/#/description    Problem:给两个正数分别为n和k,求出从1,2.......n这 ...

  4. (笔试题)质数因子Prime Factor

    题目: Given any positive integer N, you are supposed to find all of its prime factors, and write them ...

  5. [LeetCode] 786. K-th Smallest Prime Fraction 第K小的质分数

    A sorted list A contains 1, plus some number of primes.  Then, for every p < q in the list, we co ...

  6. 31,Leetcode下一个排列 - C++ 原地算法

    题目描述 实现获取下一个排列的函数,算法需要将给定数字序列重新排列成字典序中下一个更大的排列. 如果不存在下一个更大的排列,则将数字重新排列成最小的排列(即升序排列). 必须原地修改,只允许使用额外常 ...

  7. LeetCode. 计数质数

    题目要求: 统计所有小于非负整数 n 的质数的数量. 示例i: 输入: 10 输出: 4 解释: 小于 10 的质数一共有 4 个, 它们是 2, 3, 5, 7 . 代码: class Soluti ...

  8. [LeetCode]1528. 重新排列字符串

    给你一个字符串 s 和一个 长度相同 的整数数组 indices . 请你重新排列字符串 s ,其中第 i 个字符需要移动到 indices[i] 指示的位置. 返回重新排列后的字符串. 示例 1: ...

  9. [LeetCode]1470. 重新排列数组

    给你一个数组 nums ,数组中有 2n 个元素,按 [x1,x2,...,xn,y1,y2,...,yn] 的格式排列. 请你将数组按 [x1,y1,x2,y2,...,xn,yn] 格式重新排列, ...

随机推荐

  1. python渗透测试工具集

    下载地址:https://github.com/githubmaidou/tools

  2. Python 基础知识 (1) 持续更新

    (1)数字和表达式 当进入Python交互式的时候,Python就可以直接当成计算机使用 如 >>> 2 + 2 4 但是 当 1个整数 和 另外一个整数 相除的时候,计算的结果,只 ...

  3. [转]web.xml中servlet ,filter ,listener ,interceptor的作用与区别

    原文链接:https://blog.csdn.net/netdevgirl/article/details/51483273 一.概念: 1.servlet:servlet是一种运行服务器端的java ...

  4. 2018ccpc吉林 E:THE TOWER——数形结合

    题目 链接 给你一个圆锥(位于坐标原点,告诉你高h 和底面半径 r),和一个点(x,y,z)并告诉你这个点的速度, 让你求点和圆锥相撞的最小时间(保证一定相撞) 分析 易知,将直线的参数方程与圆锥曲面 ...

  5. 洛谷P1372 又是毕业季I【数论】

    题目:https://www.luogu.org/problemnew/show/P1372 题意: 在1~n之中找k个数,使得他们的最大公因数最大. 思路: 假设ans是答案,说明选择的k个数分别是 ...

  6. .net 中跨域问题

    1.ashx跨域接口 context.Response.Headers.Add("Access-Control-Allow-Origin", "*"); 2.w ...

  7. 隐藏IDEA project 中的指定文件

    例如隐藏project下的.idea文件目录,以及.iml文件 在 Settings>File Types > ignore files and folders 中添加    .idea; ...

  8. filter(expr|obj|ele|fn)筛选出与指定表达式匹配的元素集合。

    filter(expr|obj|ele|fn) 概述 筛选出与指定表达式匹配的元素集合. 这个方法用于缩小匹配的范围.用逗号分隔多个表达式 参数 exprStringV1.0 字符串值,包含供匹配当前 ...

  9. CentOS7部署tomcat

    首先检查是否安装了jdk,然后再查看是否配置了JAVA_HOME 配置JAVA_HOME的方法: 我的是jdk已经安装好了是1.8 我需要找到它的安装目录 [root@bogon xwg]# java ...

  10. quartz.net 执行后台任务

    ... https://www.cnblogs.com/zhangweizhong/category/771057.html https://www.cnblogs.com/lanxiaoke/cat ...