在介紹解法之前,先介紹質因數分解- 合數:合數是指在大於1的整數中除了能被1和本身整除外,還能被其他數(0除外)整除的數。
- 質數:質數是指在大於1的自然數中,除了1和它本身以外不再有其他因數的自然數。
- 質因數:每個合數都可以寫成幾個質數相乘的形式,這幾個質數就都叫做這個合數的質因數。
- 質因數分解:正整數的因數分解可將正整數表示為一連串的質因子相乘,質因子如重複可以指數表示。根據算術基本定理,任何正整數皆有獨一無二的質因子分解式。
解法
class test
// 問題1 解法1,暴力將n的階乘求出來然後再進行計算,但是這種情況很有可能會出現溢位的情況,是非常不建議使用的。
/** 質因數分解方法
*/ public static int zeroofn(int n)
} return res;
} // 問題1 解法3
/**上述的z可以表示為$z = [n/5] +[n/5^2] +[n/5^3]+...$
*/ public static int zeroofn2(int n)
return res;
}}
解法
class test
// 問題2 解法1
/**這個問題就相當於求n!中含有質因數2的個數,即答案等於n!含有質因數2的個數+1
n!中含有質因數2的個數等於$n/2 + n/4 + n/8 + n/16 + ...$
*/ public static int posofn(int n)
return res;
} // 問題2 解法2
/**n!含有質因數2的數目,還等於n減去n的二進位制表示中1的數目
*/ public static int posofn2(int n)
return n-t;
}}
class test
// 拓展問題:給定乙個整數,判斷他是否是2的冪
public static boolean is2(int n)
}
不要被階乘嚇倒
階乘 factorial 是個有意思的函式,但是不少人都比較怕它,我們來看看兩個與階乘相關的問題.1.給定乙個整數n,那麼n的階乘n!末尾有多少個0呢?例如 n 10,n 3628 800的末尾有兩個0.2.對於n 的二進位制表示中最低位 的位置.解 問題一的解法一 第乙個問題比較簡單我一下就想出來...
不要被階乘嚇倒
public class jiecheng system.out.println count n的階乘中 因子k 的個數有個公式 z n k n k2 n k3 n kx param a public static void execute2 int a system.out.println cou...
不要被階乘嚇倒
問題1 n的階乘中末尾有幾個0 考慮對n!進行質因數分解,n!2 x 3 y 5 z 由於10 2 5,所以m只跟x和z相關,每一對2和5相乘可以得到乙個10,於是m min x,z 不難看出x大於等於z,因為能被2整除的數出現的頻率比能被5整除的數高得多,所以把公式簡化為m z。其實也就是求n的階...