leetcode周賽152 5173質數排列

2022-03-21 05:58:49 字數 1337 閱讀 1169

題目描述:

請你幫忙給從1n的數設計排列方案,使得所有的「質數」都應該被放在「質數索引」(索引從 1 開始)上;你需要返回可能的方案總數。

讓我們一起來回顧一下「質數」:質數一定是大於 1 的,並且不能用兩個小於它的正整數的乘積來表示。

由於答案可能會很大,所以請你返回答案 模 mod10^9 + 7之後的結果即可。

示例 1:

輸入:n = 5

輸出:12

解釋:舉個例子,[1,2,5,4,3] 是乙個有效的排列,但 [5,2,3,4,1] 不是,因為在第二種情況裡質數 5 被錯誤地放在索引為 1 的位置上。

示例 2:

輸入:n = 100

輸出:682289015

解題思路:

常規型別的題目,但是在統計質數個數的時候,在math.sqrt處理下可能也會出現timeout limit ,因此,此處使用 厄拉多塞篩法 進行一定範圍內的質數的統計,具體演算法相見**。

同時,在進行mod操作時,mod操作具有交換律 (a*b*c)%m = a%m*b%m*c%m

掌握要點:

質數統計演算法 厄拉多塞篩法

連乘中mod操作具有交換律

原始碼展示:

1

public

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 ...