題目描述:
請你幫忙給從1
到n
的數設計排列方案,使得所有的「質數」都應該被放在「質數索引」(索引從 1 開始)上;你需要返回可能的方案總數。
讓我們一起來回顧一下「質數」:質數一定是大於 1 的,並且不能用兩個小於它的正整數的乘積來表示。
由於答案可能會很大,所以請你返回答案 模 mod10^9 + 7
之後的結果即可。
示例 1:
輸入:n = 5示例 2:輸出:12
解釋:舉個例子,[1,2,5,4,3] 是乙個有效的排列,但 [5,2,3,4,1] 不是,因為在第二種情況裡質數 5 被錯誤地放在索引為 1 的位置上。
輸入:n = 100輸出:682289015
解題思路:
常規型別的題目,但是在統計質數個數的時候,在math.sqrt處理下可能也會出現timeout limit ,因此,此處使用 厄拉多塞篩法 進行一定範圍內的質數的統計,具體演算法相見**。
同時,在進行mod操作時,mod操作具有交換律 (a*b*c)%m = a%m*b%m*c%m
掌握要點:
質數統計演算法 厄拉多塞篩法
連乘中mod操作具有交換律
原始碼展示:
1public
int numprimearrangements(int
n) 67//
質數的個數
8boolean sign = new
boolean[n + 1];
9int primes_count = 0;
10for(int i = 2; i <= n;i++)16}
17}1819
//求階乘
20int no_primes_count = n -primes_count;
21int max =math.max(no_primes_count,primes_count);
22int min =math.min(no_primes_count,primes_count);
2324
//模運算復合交換律
25long res = 1;
26for(int i = 1;i <= max;i++)33}
34return(int
) res;
3536 }
Leetcode 周賽記錄
希望能記錄到八月中旬開學吧。反正就沒啥意義 周賽回到了他溫柔可人的樣子 前兩周的分割我感覺可能寫起來會比較吃力 40 min搞定,很愉快 a字串分割沒啥好說的。b的話我覺得它應該降低記憶體空間或者增大長度,一看只有七個都brute force了。就不好玩了orz c葉子的定義有毛病 我很奇怪為什麼有...
LeetCode周賽記錄 第196場周賽
2020年7月5日,leetcode第196場周賽個人記錄。第一次參加leetcode周賽,4道題目完成3道,中國排名163,全球排名377。對我個人來說算是個普通成績吧。以後打算每兩周參加一次周賽,同時利用部落格記錄下每次的成績,同時分享一下對於題目的個人想法和感受。給你乙個數字陣列 arr 如果...
Leetcode 周賽 203 題解
雖然直接模擬是乙個辦法,但是實際上兜了n圈之後最後多出來的部分就是所求 即 1 3 2 4 等效於 1 4 class solution def mostvisited self,n int,rounds list int list int s,e rounds 0 rounds 1 if s e ...