我採用的方式:
1.
首先先用陣列[階層]把數存好,陣列所存的東西是math[n]~math[m] 值互相對應m格就是m,再來就是把能除的,將那一個除掉,一定能除,但是會可能分散再別的數裡面,所以會用到公因數。
ex.18 6
我會取math[13]=13,math[14]=14....到math[18]=18
然後除1.2.3.4.5.6 這些數字再以上的陣列去搜尋,並把他們除掉
遇到2 math[14]=7;
3 math[15]=5;
4 math[16]=4;
5 math[15]=1;
6 math[16]=2;math[18]=6;
總結 math[13]=13,math[14]=7,math[15]=1,math[16]=2,math[17]=17,math[18]=6
之後再將剩下的通通乘出來,之所以這樣做,是怕途中暴掉,用double又不準確
這樣的話,就可以使用大數囉[答案的部分]!!
2.等網友提供
我採用的方式:
1.
首先先用陣列[階層]把數存好,陣列所存的東西是math[n]~math[m] 值互相對應m格就是m,再來就是把能除的,將那一個除掉,一定能除,但是會可能分散再別的數裡面,所以會用到公因數。
ex.18 6
我會取math[13]=13,math[14]=14....到math[18]=18
然後除1.2.3.4.5.6 這些數字再以上的陣列去搜尋,並把他們除掉
遇到2 math[14]=7;
3 math[15]=5;
4 math[16]=4;
5 math[15]=1;
6 math[16]=2;math[18]=6;
總結 math[13]=13,math[14]=7,math[15]=1,math[16]=2,math[17]=17,math[18]=6
之後再將剩下的通通乘出來,之所以這樣做,是怕途中暴掉,用double又不準確
這樣的話,就可以使用大數囉[答案的部分]!!
2.等網友提供
C (n, m) = C (n, m-1) * (n-m+1) / m
只要先把 (n-m+1) / m 約分,然後先除分母再乘分子就不會爆了!用遞迴或迴圈來做都行。
本題的一個簡單解法就是用long double
printf("%.0Lf", ... );
本題的一個簡單解法就是用long double
printf("%.0Lf", ... );
本題的一個簡單解法就是用long double
printf("%.0Lf", ... );