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