排列最後地非零位有2,5,3,7,9地次方來決定,而且這幾個數地次方最後一位都是週期出現。
在計算地過程中先找出1……n中有多少2和5地冪,比如找2,先找出偶然n/2個,然後/2,再找。找到2和5地冪,比大小處理。
末尾數字3,5,7地處理花了寫時間,先用處理類似2,5地迴圈來寫總是出錯。手工花了資料,發現是個樹,只好dfs了。比如1……30,我們先統計除裡面末位3地個數,我們在前面不斷地除2,除5,因此要統計這時候3地個數,但是進行多次過程中n/2/5和n/5/2就重複統計了,因此要減去。
參考**
#include#includeusing namespace std;
int p2[5]= ,p3[5]=,p7[5]=,p9[5]=;
int di(int n,int a)
int di379(int n,int a)
int work(int n,int m) {
int a2,a5,a3,a7,a9,ans=1;
a2=di(n,2)-di(n-m,2);
a5=di(n,5)-di(n-m,5);
if(a2>a5)a2-=a5,a2%=4,ans=p2[a2];
else if(a2==a5) ans=1;
else {ans=5;cout<<5<
poj1150 求排列Anm的末尾非0數字
題意 求npm,即n個元素的m中排列方式結果中末尾非0 的數字。思路 首先我們知道,2和5相乘末尾非0數字為1,相當於可以相消。我們先把這兩個因子抽離出來,考慮末尾為3,7,9的數字。設f n,x 為 n!因子中,抽離了2,5,後末尾數字為x的因子個數。分析可以知道f n,x f n 2,x g n...
n 最後一位非零數 poj 1150
題意 求p n,m 的最後一位非零數。思路 討論1 n中2,5,3,7,9因子的個數,具體移步 按照我的理解,求n!最後非零為,先把1 n中 2 和 5 的因子的數量求出來,因為只有2和5可以構成0,接下來就要分別求出1 n中最後一位為3,7,9的數字的數量,然後相乘就可以得到n!的最後一位的數 i...
POJ 1469 排列組合的思維
題意就是說給一列序列.其順序是 1 a 2 b 26 z 27 ab.28 ac.51 az.52 bc.類似這樣.其中的字串都是每一位比前一位大.最長為vwxyz.給出乙個字串.求出其在佇列中的序列號.這道題就是用乙個排列組合.比如求 bdf 求出1位和2為總共有多少個.然後每一位就依次求出前一位...