Transcript ppt

10856: Recover Factorial






★★★☆☆
題組:Contest Volumes
題號:10856: Recover Factorial
解題者:吳培銘
解題日期:2011年3月9日
題意:給一個非負整數 N (N<=10000001),而X!的質因
數個數為N,請找出最小可能的值X。
例如 4! = 24 = 2 x 2 x 2 x 3 ( 質因數個數為4 ) ,本題最
多會有 1000 筆測資。
1
題意範例: 4
 Case 1: 4!
240  Case 2: 101!
241  Case 3: Not possible.
-1 
解法:
先用篩法求出一質數表。
質數表:


0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
…
0
0
1
1
0
1
0
1
0
0
0
1
0
1
0
0
0
…
先將全部設為1,再將質數的所有倍數設為0,最後是1的
就是質數。
2
對每一個數X除以從2開始可整除的質數,直到變為質數
後即可跳出。可得X的質因數個數num[X],並以sum[X]記
錄 X 之前的質因數總數。
質因數個數表:(Sum[X] = Num[X] + Sum[X-1])
0 1 2 3 4 5 6 7 8
9
10 11 12 13
14 15
…
Num
0 0 1 1 2 1 2 1 3
2
2
Sum
0 0 1 2 4 5 7 8 11 13 15
1
3
1
2
3
…
16
19
20
22
25
…
最後對sum[]做binary searching 即可。


解法範例:無
討論:
(1) 注意 0 應輸出 0!
(2) 最多只需到2703663階層
3

另解:
在篩法的過程中,從2開始對每一質數X的倍數的
num[]加一(num[Y]++),然後再對X的所有指數倍做重複
的動作。如下:
Array:
0
1
2
3
4
5
6
7
8
9
10
11
12
…
Term1
0
0
1
0
1
0
1
0
1
0
1
0
1
…
Term2
0
0
1
0
2
0
1
0
2
0
1
0
2
…
Term3
0
0
1
0
2
0
1
0
3
0
1
0
2
…
…
…
…
…
…
…
…
…
…
… … …
…
…
…
Term k
0
0
1
1
2
0
2
0
3
1
1
0
3
…
Term k+1
0
0
1
1
2
0
2
0
3
2
1
0
3
...
…
…
…
…
…
…
…
…
…
… … …
…
…
…
4