AcWing 3588. 排列与二进制
原题链接
简单
作者:
卡冈图亚
,
2023-07-17 02:40:57
,
所有人可见
,
阅读 84
很经典的一道题,对于某一进制的数来说,它的因子有多少个该进制数,末位就有多少个0
打个比方,10^9为10进制数,其因子含有9个10,所以末位有9个零
对于该题而言就是看排列数的因子有多少个2,不用算出该数,根据阶乘因子直接统计个数即可
#include <bits/stdc++.h>
#define IOS ios::sync_with_stdio(false), cin.tie(0), cout.tie(0)
#define ri register int
#define endl '\n'
#define rep(i, x, y) for(ri i = x; i <= y; ++ i)
#define pre(i, x, y) for(ri i = x; i >= y; -- i)
#define x first
#define y second
#define lowbit(x) (x&(-x))
#define maxe max_element
#define mine min_element
#define all(v) v.begin(), v.end()
#define pb push_back
#define qb pop_back
#define pf push_front
#define qf pop_front
using namespace std;
using i64 = int64_t;
const int N = 1e4 + 10;
int n, m, res;
int main()
{
IOS;
while(cin >> n >> m, n || m)
{
m = n - m;
res = 0;
rep(i, 1, n)
{
ri p = i;
while(p % 2 == 0) ++ res, p /= 2;
}
rep(i, 1, m)
{
ri p = i;
while(p % 2 == 0) -- res, p /= 2;
}
cout << res << endl;
}
return 0;
}