ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#213130 | #2356. Count | KXG | 94 | 354ms | 37500kb | C++11 | 2.4kb | 2024-11-09 20:45:02 | 2024-11-09 23:17:47 |
answer
#include <cstdio>
#include <algorithm>
using namespace std;
const long long mod = 1e9 + 7;
const int maxn = 200000;
int prime[maxn + 10], tot, min_prime[maxn + 10];
bool np[maxn + 10];
long long inv[maxn + 10], invfac[maxn + 10], fac[maxn + 10];
void init() {
np[1] = true;
for (int i = 2; i <= maxn; i++) {
if (!np[i]) {
prime[++tot] = i;
min_prime[i] = i;
}
for (int j = 1; j <= tot && 1ll * i * prime[j] <= maxn; j++) {
np[i * prime[j]] = true;
min_prime[i * prime[j]] = prime[j];
if (i % prime[j] == 0) break;
}
}
inv[1] = 1;
for (int i = 2; i <= maxn; i++) {
inv[i] = (mod - mod / i) * inv[mod % i] % mod;
}
invfac[0] = 1;
fac[0] = 1;
for (int i = 1; i <= maxn; i++) {
invfac[i] = invfac[i - 1] * inv[i] % mod;
fac[i] = fac[i - 1] * i % mod;
}
}
long long C(long long n, long long m) {
if (m > n) {
return 0;
}
return fac[n] * invfac[m] % mod * invfac[n - m] % mod;
}
int n, k, l1, l2;
long long dp[100010][20], sum[100010][20];
long long sumc[20];
long long ans1, ans2, ans3, ans4;
int main() {
init();
scanf("%d%d%d%d", &n, &k, &l1, &l2);
for (int i = 1; i <= k; i++) {
if (k % i == 0) {
ans1++;
}
}
dp[1][0] = 1;
for (int i = 0; i < 20; i++) {
for (int j = 0; j < l1; j++) {
sumc[i] += C(j, i);
}
sumc[i] %= mod;
}
for (int i = 1; i <= n; i++) {
for (int j = 0; j < 20; j++) {
if (dp[i][j]) {
dp[i][j] %= mod;
sum[i][j] += dp[i][j] * i;
sum[i][j] %= mod;
for (int k = 2 * i; k <= n; k += i) {
dp[k][j + 1] += dp[i][j];
sum[k][j + 1] += sum[i][j];
}
}
}
}
for (int i = 1; i <= n; i++) {
for (int j = 0; j < 20; j++) {
ans2 += sumc[j] * dp[i][j] % mod;
}
ans2 %= mod;
}
for (int i = 1; i <= n; i++) {
for (int j = 0; j < min(20, l2); j++) {
ans3 += dp[i][j];
ans4 += sum[i][j];
}
ans3 %= mod;
ans4 %= mod;
}
printf("%lld %lld %lld %lld\n", ans1, ans2, ans3, ans4);
return 0;
}
详细
小提示:点击横条可展开更详细的信息
Test #1:
score: 7
Acceptable Answer
time: 11ms
memory: 6260kb
input:
5 0 7 3
output:
0 126 6 26
result:
points 0.70 wrong correct correct correct
Test #2:
score: 7
Acceptable Answer
time: 12ms
memory: 6260kb
input:
8 0 9 4
output:
0 807 14 108
result:
points 0.70 wrong correct correct correct
Test #3:
score: 10
Accepted
time: 14ms
memory: 6260kb
input:
10 1 10 5
output:
1 1585 19 171
result:
points 1.0 correct correct correct correct
Test #4:
score: 10
Accepted
time: 13ms
memory: 6412kb
input:
500 2 996 6
output:
2 370442183 13552 5619309
result:
points 1.0 correct correct correct correct
Test #5:
score: 10
Accepted
time: 16ms
memory: 6500kb
input:
800 233 966 7
output:
2 31028437 32745 22476650
result:
points 1.0 correct correct correct correct
Test #6:
score: 10
Accepted
time: 12ms
memory: 6568kb
input:
1000 666 999 10
output:
12 494787167 48614 41846205
result:
points 1.0 correct correct correct correct
Test #7:
score: 10
Accepted
time: 58ms
memory: 21880kb
input:
50000 2048 98673 100
output:
12 795207831 42179339 148036147
result:
points 1.0 correct correct correct correct
Test #8:
score: 10
Accepted
time: 55ms
memory: 31256kb
input:
80000 65535 25192 50
output:
16 857081183 94939299 733768189
result:
points 1.0 correct correct correct correct
Test #9:
score: 10
Accepted
time: 76ms
memory: 37496kb
input:
100000 23333 99696 12
output:
2 921281341 139356052 982603214
result:
points 1.0 correct correct correct correct
Test #10:
score: 10
Accepted
time: 87ms
memory: 37500kb
input:
100000 89941 99669 6
output:
4 684798865 39157829 910194864
result:
points 1.0 correct correct correct correct