50的階乘的質因數分解式及末尾0的個數

2022-04-07 07:02:35 字數 3721 閱讀 5785

1樓:科力爾

要分解質因數,先求出不超過50的所有素數。結果是2,3,5,7,11,13,17,19,23,29,31,37,41,43,47。

50的階乘分解質因數後應是這種形式

50!=2^a×3^b×5^c×......,關鍵是求出這些素數的指數a,b,c

我以2和3為例,其他素數的指數的演算法都跟這個是一樣的。首先用[x]表示不超過數字x的最大整數,例如[3.5]=3,[0.5]=0,[-2.5]=-3

算到[50/2^5]就夠了,再往下算的話都是0了

3的指數b=[50/3]+[50/3^2]+[50/3^3]=16+5+1=22

50!=2^47×3^22......

省略號的部分演算法都跟這個是一樣的

c語言中怎麼得到任意整數的階乘末尾的0的個數?

2樓:匿名使用者

iamxujian的已經不錯了,如果把long 改成unsigned __int64支援的範圍能更大

恩恩,程式差不多了 ,我就給你說下這個演算法版的原理:

如果想權在末尾湊成個0 那麼就相當於乘以個10 而10可以分解為2x5

所以說只要把n!因子2的個數和5的個數計算出來,取少的就是結果

因為在1 2 .....n中 偶數的個數肯定比5的倍數多,所以只要求出n!最多可以表示為5的多少次方。。。就是答案

首先找到1 2 .....n中可以被一個5整除的數的個數,是n/5,存到ret裡

然後再找1 2 .....n中可以被25整除數的個數,是n/25,加到ret裡(除以25是因為序列裡可能存在25的倍數,而上一步只統計了5的倍數,這樣就會漏掉一些5)

然後再找1 2 .....n中可以被125整除數的個數,是n/125,加到ret裡(除以125是因為序列裡可能存在125的倍數,而上一步只統計了25的倍數,這樣就會漏掉一些5)

....

.直到five大於n,迴圈結束,

返回的ret就是結果

3樓:匿名使用者

/* 算到0xffffffff的階乘沒

問題. 再大就要換資料專型別屬

了 */

#include

unsigned long calc ( unsigned long n )

int main ( void )

4樓:匿名使用者

先用for迴圈求階乘;

然後用取餘數的計算判斷一下最後一個數字是否為0,比版如97010%10,那麼就

權是餘數就是0,只要%10就行。餘數為0就把他輸出,不是0的不用管。也要一個迴圈來遍歷一下。

很簡單,自己寫好了。

另外任意整數是不現實的,必須定義一個最大值,要不計算機會溢位的,隨便給個最大值。比如99999,然後迴圈求從1到99999的連乘運算。最後迴圈用%10的方法,是0的就輸出,不是0的就罷了。

5樓:匿名使用者

int faczeros(int n)

return rzt;}

256階乘末尾0的個數

6樓:萬昌機電

一個正整數的階乘是所有小於及等於該數的正整數的積那麼顯然只有乘以10,還有2×5 這兩個計算可以新增0 於是求n的階乘末尾有幾個0時就計算0和5的個數和或者對(n+5)/5取整即可

7樓:匿名使用者

末尾有0的兩位數乘兩位數微課

求100的階乘中末尾數零的個數

8樓:鍾學秀

要看有多少個零即可以找到多少個2和5配對,但是5的個數少於2的所以最後由5的個數決定,5的倍數有100/5=20;

25的倍數(即提供兩個5的)有100/25=4;

所以100!中可以分解因式出來24個5,所以最後答案為24個0.

9樓:匿名使用者

21個,1~100裡有11個零;尾數為5的有10個,尾數為2的有10個。5*2=10,所以21個

10樓:伊清馨環旻

一個連乘積中有一個5乘以一個2,就會在末尾有一個0。一個自然數的階乘末尾的0的個數,就等於它的所有乘數中含有因子5的個數,這是因為因子2的個數比因子5的個數明顯要多的緣故。例如,20!

、21!、22!、23!

、24!的末尾都是有4個0,但是25!末尾會有6個0。

因為25中含有2個因子5。

#include

intmain()

printf("100!末尾有

%d個0\n",s);

system("pause");

return

0; }

11樓:匿名使用者

24100/5=20

100/25=4

100/125=0...100

20+4=24

給定一個整數n,n的階乘n,末尾有多少個0

12樓:匿名使用者

解法一:演算法比較簡單,就是直接計算階乘的裡面的每一個元素包含5的個數public static int countzeronum1(int n)

}return num;

}解法二:公式 z=[n/5] + [n/5^2]+ ...該公式的[n/5]含義是在不大於n的階乘中包含一個5的個數,就比如40裡面,包含一個5的個數為5,10,15,20,..

40 即 40/5=8個(裡面有8個元素包含一個5),那當我們遇到類似於元素為25時,裡面有5*5時,即裡面有兩個5,所以就用[n/5^2]算出包含兩個5時的個數,類似這樣的運算,當5^k>n時,停止

public static int countzeronum2(int n)

return num;}

請問計算n的階乘末尾有多少個0

13樓:手機使用者

乘積末尾的0的個數依賴於因子中的2的個數和5的個數。對於階乘來說,每2個數字就至少有一個2的因子,所以2的因子是足夠的。5的因子相對少些,至少連續5個數才能保證一定出現一個。

注意,這裡連續5個數保證出現一個5的因子是指最少的情況。比如1,2,3,4,5,這就只會出現一個。 intnzerooffactorial(intn) returnzerocnt;} e.

g. nzerooffactorial(81) = 19

求1000階乘末尾零的個數

14樓:卿涉皇心

每出現一個2和5,就會在末尾有一個0,所以只要看,從1

到1000中總共有多少個2和5就可以了,又因為5總比2少,所以,只要看1000的階乘中有多少個約數5就可以了。同樣,只有末尾是0或者5的數才會有5,所以總共只有200個數其中包含5,但是,其中有1000/25=40個數包含2個5,1000/125=8個數包含三個5,1000/625=1個數包含4個5,所以總共有200+40+8+1=249個5,所以結果裡總共有249個0。

15樓:匿名使用者

#include

int main()

m = m % 1000;

}printf("%d\n", j);

// printf("%d\n", m);

return 0;}

16樓:匿名使用者

這個演算法有問題,我想的太簡單了,不好意思

分解質因數的方法是什麼分解質因數的方法

分解質因數的方法有兩種 1 相乘法 寫成幾個質數相乘的形式 這些不重複的質數即為質因數 實際運算時可採用逐步分解的方式。如 36 2 2 3 3 運算時可逐步分解寫成36 4 9 2 2 3 3或3 12 3 2 2 3 2 短除法 從最小的質數除起,一直除到結果為質數為止。分解質因數的算式的叫短除...

14,18分解質因數,90的分解質因數是

14 2 7 18 2 3 3 分解質因數 每個合數都可以寫成幾個質數相乘的形式。其中每個質數都是這個合數的因數,叫做這個合數的分解質因數。分解質因數只針對合數。90的分解質因數是?40 90 九十 是89與91之間的一個自然數。90也是一個偶數。該數字可以表示年代。中文名九十 外文名ni y 大 ...

c語言分解質因數的問題,C語言分解質因數

我不得不遺憾的告訴你,這是一個效率非常低的演算法,每找到一個素因子後都重新從2開始再次尋找,一個顯然的改進是找到一個素因子後反覆試除該因子 這樣註釋的已經很好了啊 if m k 0 說明還沒找到因數,每次都是從2開始,逐漸遞增,來找因數的 else,else部分,說明已經找到了因數,找到因數以後,先...