任何数在计算机内部都是用二进制表示的,可以用这个特性来快速判断N!的二进制表示中最低位1的位置。
解法一:
将一个数的二进制数除以2,若二进制数的末尾是0,则能整除,否则不能整除。
因此,求 N!的二进制表示中最低位1的位置 即为求 N!中有多少个质因数2
以下为代码1:
#include <iostream> using namespace std; int main(void) { int n,m; m=0; cin>>n; while(n) { n>>=1; m+=n; } cout<< m+1 <<endl; //m为n!中质因数2的个数,所以最后结果要加 1 return 0; }
解法二:
N!中含有质因数2的个数,等于 n-(n的二进制表示中1的个数)
(这个规律可自行证明)
代码2:
#include <iostream> using namespace std; int main(void) { int n,i,j,m; m=0; j=0x1; cin>>n; i=n; while(i) { m+=(i&j); i>>=1; } cout << n-m+1 <<endl; //m为n!中质因数2的个数,所以最后结果要加 1 return 0; }
时间: 2024-10-12 04:12:19