一道因數分解的相關數學題

2021-05-23 12:55:42 字數 1114 閱讀 9914

題目位址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...