題目位址http://acm.zju.edu.cn/onlinejudge/showproblem.do?problemid=222
此為數學題。
題目要求求出n!的最後一位(即最低位)非零位是多少。
分析過程:
我們得先明確一點: 乘積中的因子10只有2,5兩質因數相乘才能得到。
可以先來觀察下乘積末尾不為0的情況,因此我們試著把乘積中5的倍數均去掉。
① 當 0<=n<10
那麼 1~9 n! 中最後一非零位分別為 1,1,2,6,4,4,4,8,4,6 (已經去掉5)
因為事先去掉了5,所以當我們把5補上的時候,相當於最後一位數均除以2。
於是正確的輸出應該是 1,1,2,6,4,2,2,4,2,8。(
這裡可能有人會有疑問,為什麼最後一位不是3呢?這是因為乘數中的因子2比5要多很多,所以n!總是偶數
② 剩下的情況
由①可知 當 0那對於n的其他取值呢?
可以發現,乘數若以九個為一組,每組各位由1~9,其他位相同。那麼都是遵循這一規律的。
由於9!(去5)位數為6,所有組的個位乘積為6*6...6*6。最後個位還是6。
因此現在把注意力轉移到n的最後一位數字(即n%10)。
單個數字的乘積末尾情況已經給出了。
所以現在的任務就是把5的倍數補回去。
5的倍數: 5 10 15 20 ... 5k 5(k+1)
我們將每個數提取乙個5,那麼得到1 2 3 4 ... k k+1。 怎麼樣,又回到過去了吧? 是不是想到遞迴了呢。
若答案是f(n), 那麼現在這個便是f(n/5)。
還有提取的5^(n/5)呢?每成個5,相當於除以2,因此
f([n/5]) * table[n的尾數] * 6
f(n) = ---------------------------------------- (n > 10) (裡面的table便是先前給出的序列,這個公式直接從網上覆制了 ^_^)
2^([n/5] mod 4)
這裡mod4的原因是(2,4,6,8 (剛說了,最後位總是偶數) )除2是以4次為一迴圈的,可以筆算下。
好了,分析完畢,你可以用遞迴或者迭代的計算方式。
我採用了迭代的方法,**如下:
每日一題 質因數分解
質因數分解 已知正整數n是兩個不同的質數的乘積,試求出較大的那個質數。輸入格式 輸入只有一行,包含乙個正整數n。輸出格式 輸出只有一行,包含乙個正整數p,即較大的那個質數。資料範圍 6 n 2e9 輸入樣例 21輸出樣例 7算術基本定理 題目描述正整數n是兩個不同質數的乘積,由算數基本定理可得存在唯...
一道怪怪的數學題
如圖1 其中一種初態 乙個4 4的棋盤,上面有1 15共15個數字和乙個空格 用 表示 要求利用空格移動棋子把他們排成圖2的形式 目標狀態 10 1 11 14 1 2 3 4 2 3 5 5 6 7 8 8 9 4 15 9 10 11 12 12 13 6 7 13 14 15 圖1 圖2 問題...
一道數學題引發的世界動盪
今天在網上看到乙個這樣的試題,與大家 一下 0.99999 等於1嗎?0.99999無限迴圈和1究竟哪個大?0.9999.與1比大小 挺白痴的問題,卻引起n多人的關注與激烈討論。首先您是認為哪個答案呢?a.0.9999.1 b.0.9999.1 c.0.9999.1 d.我想絕大多數都會認為是答案a...