cf 232 div2B. On Corruption and Numbers
输入为m, l , r
首先看出来组成的所有的数,可以组成区间[l, r]; [2 * l, 2 * r] ...
再则判断m是否在这些区间里即可
以下2种, 3.利用k*l <= n <= k * r来判断4.直接判断 m%l <= (r - l) * (m / l);
int n;
int m, l, r;
int main(){
cin >> n;
while (n--)
{
scanf("%d%d%d", &m, &l, &r);
if (l == r)
{
if (m % l == 0) puts("Yes");
else puts("No");
continue;
}
///1:
long long mx = 1LL * (m / l) * r;
if (mx >= m) puts("Yes");
else puts("No");
///2:
// if ( m >= (1LL * l * r) ) puts("Yes");
// else
// {
// int i = 1;
// int left = l, right = r;
// while (1)
// {
// if (left <= m && m <= right)
// {
// puts("Yes"); break;
// }
// else if (left > m)
// {
// puts("No"); break;
// }
// left += l;
// right += r;
// }
// }
}
}
cf 232 div2 C. On Number of Decompositions into Multipliers
首先分解质因子:
map<int, int>m;
void get(int x)
{
for (int i = 2; i <= x / i; i++)
{
while (x % i == 0)
{
m[i]++;
x /= i;
}
}
if (x!=1)
{
m[x]++;
}
}
再则关于n个球放入m个箱子的组合数:cn[n+m-1][m-1];
最后求组合数,中间要取模;
(1)可以直接算(2)预处理n!算(3)利用cn[n][m] = cn[n - 1][m - 1] + cn[n - 1][m],递归预处理
void init()
{
// cn[1][0] = cn[1][1] = 1;
// for (int i = 2; i < 15000; i++)
// {
// cn[i][0] = 1;
// for (int j = 1; j <= min(i, 500); j++)
// cn[i][j] = (cn[i - 1][j - 1] + cn[i - 1][j]) % MOD;
// }
for (int i = 0; i < 15000; i++)
cn[i][0] = 1;
for (int i = 0; i < 15000; i++)
for (int j = 1; j <= min(i, 500); j++)
cn[i][j] = (cn[i - 1][j - 1] + cn[i - 1][j]) % MOD;
}