求n 中因子k的個數

2022-03-04 21:32:48 字數 857 閱讀 5540

思路:

求n的階乘某個因子k的個數,如果n比較小,可以直接算出來,但是如果n很大,此時n!超出了資料的表示範圍,這種直接求的方法肯定行不通。其實n!可以表示成統一的方式。

n!=(km)*(m!)*a   其中k是該因子,m=n/k,a是不含因子k的數的乘積

下面推導這個公式

n!=n*(n-1)*(n-2)*......3*2*1

=(k*2k*3k.....*mk)*a  (a是不含因子k的數的乘積,顯然m=n/k;n!中必定包含1到m個k相乘)

=(km)*(1*2*3...*m)*a    

=km*m!*a       (統計時ans+=m,然後繼續去求m!中含有的k因子個數)

接下來按照相同的方法可以求出m!中含有因子k的個數。

因此就可以求除n!中因子k的個數

舉例:

比如要求8!中因子2的個數。

原式=8!=1*2*3*4*5*6*7*8

第一步:對8除2(21),相當於將1到8中所有「第乙個」2因子提取出來。 (此時原式=1*1*3*2*5*3*7*4)

第二步:對8除4(22),相當於將1到8中所有」第二個「2因子提取出來。 (此時原式=1*1*3*1*5*3*7*2)

第三步:對8除8(23),相當於將1到8中所有」第三個「2因子提取出來。 (此時原式=1*1*3*1*5*3*7*1)

第四步:對8除16(24),結果為0,退出迴圈。

實現:

1

int count(int n,intk)2

9return

num;

10 }

寒假安排 求n !中v因子的個數

b 寒假安排 time limit 1000msmemory limit 64000kb64bit io format lld llu submit status practice acdream 1084 description 寒假又快要到了,不過對於lzx來說,頭疼的事又來了,因為眾多的後宮都...

求n個數 1 n 的質因子

求n個數 1 n 的質因子,我用到了素數篩選法的思想,例如找到素數2,2是2,4,6,8,10 的質因子,3是3,6,9,12 的質因子,然後找到素數5,若是求乙個數n的質因子,請參考 include includeint a 10001 20 b 10001 b i 表示第i個數的質因子個數,a ...

N個數,求第K大數

有n個不重複的數,這n個數可以放入記憶體中,讓你用最快的方法找到第k大的數。解答 一般情況我們可能考慮,先將n個數排序 快排序 堆排序 然後可以得到結果。但是當n很大時這樣做的效率會很低。所以我們提出一種更高效的方法 利用快速排序的特點 第一遍排序會確定乙個數的位置,這個數左邊都比它大,右邊都比他小...