QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#786889 | #5715. 幂次 | lopzith | 100 ✓ | 5ms | 19636kb | C++14 | 2.8kb | 2024-11-27 00:37:28 | 2024-11-27 00:37:29 |
Judging History
answer
#include <bits/stdc++.h>
#include <bits/extc++.h>
using namespace __gnu_pbds;
#define DEFAULT 5e5 + 5
#define int long long
#define i64 long long
#define i128 __int128
#define ull unsigned long long
#define db double
#define ldb long double
#define Arr std::vector
#define Ptn std::pair
#define fi first
#define se second
#define eb emplace_back
#define pb push_back
#define all(x) (x).begin(), (x).end()
#define popc(x) __builtin_popcountll(x)
#define clz(x) __builtin_clzll(x)
#define ctz(x) __builtin_ctzll(x)
#define chkmin(x, y) x = std::min(x, y)
#define chkmax(x, y) x = std::max(x, y)
#define FILE(x) freopen(x ".in", "r", stdin), freopen(x ".out", "w", stdout)
#define TEST(x) freopen(x ".in", "r", stdin), freopen("test.out", "w", stdout)
#define KEL(x) freopen(x ".in", "r", stdin), freopen("a.out", "w", stdout)
#define debug std::cout << "Running on " << __FUNCTION__ << ' ' << __LINE__ << std::endl;
#define fail assert(0);
#define lopzith return 0;
bool BeginPoint;
const int INF = 0x3f3f3f3f, llINF = 0x3f3f3f3f3f3f3f3f, P = 998244353;
const db eps = 1e-9;
const ull base = 13331;
const int N = 1e6 + 5;
int n, k, m, ans, A[N], vis[N];
inline int read()
{
int w = 0, f = 1;
char ch = getchar();
while (ch < '0' || ch > '9')
{
if (ch == '-') f = -1;
ch = getchar();
}
while (ch >= '0' && ch <= '9')
{
w = (w << 3) + (w << 1) + (ch - 48);
ch = getchar();
}
return w * f;
}
void init()
{
for (int i = 2; i < N; i++)
{
if (vis[i]) continue;
A[++m] = i;
for (int p = i * i; p < N; p *= i) vis[p] = 1;
}
}
bool EndPoint;
signed main()
{
std::cerr << "Memory = " << fabs(&BeginPoint - &EndPoint) / 1048576.0 << "MB" << std::endl;
n = read(), k = read();
init();
if (k == 1) return printf("%lld\n", n), 0;
for (int i = 100; i >= std::max(3ll, k); i--)
{
auto chk = [&](int x)
{
i128 mul = 1;
for (int j = 1; j <= i; j++)
{
mul *= A[x];
if (mul > n) return false;
}
return true;
};
int L = 1, R = m, aans = 0;
while (L <= R)
{
int mid = (L + R) >> 1;
if (chk(mid)) L = mid + 1, aans = mid;
else R = mid - 1;
}
ans += aans;
} ans++;
if (k == 2)
{
n = sqrtl(n); int cnt = 0;
for (int i = 1; i <= m; i++)
{
for (int p = A[i] * A[i]; p <= n; p *= A[i]) cnt++;
}
ans += (n - cnt);
ans--;
}
printf("%lld\n", ans);
std::cerr << "Time = " << (double)clock() / CLOCKS_PER_SEC << "s" << std::endl;
lopzith
}
这程序好像有点Bug,我给组数据试试?
详细
Pretests
Final Tests
Test #1:
score: 5
Accepted
time: 0ms
memory: 19616kb
input:
92 1
output:
92
result:
ok 1 number(s): "92"
Test #2:
score: 5
Accepted
time: 0ms
memory: 19572kb
input:
96 2
output:
12
result:
ok 1 number(s): "12"
Test #3:
score: 5
Accepted
time: 0ms
memory: 19612kb
input:
9383 3
output:
37
result:
ok 1 number(s): "37"
Test #4:
score: 5
Accepted
time: 0ms
memory: 19620kb
input:
9830 2
output:
124
result:
ok 1 number(s): "124"
Test #5:
score: 5
Accepted
time: 2ms
memory: 19428kb
input:
927700 3
output:
149
result:
ok 1 number(s): "149"
Test #6:
score: 5
Accepted
time: 4ms
memory: 19516kb
input:
972504 2
output:
1097
result:
ok 1 number(s): "1097"
Test #7:
score: 5
Accepted
time: 3ms
memory: 19568kb
input:
94345650 3
output:
605
result:
ok 1 number(s): "605"
Test #8:
score: 5
Accepted
time: 2ms
memory: 19172kb
input:
98811802 2
output:
10429
result:
ok 1 number(s): "10429"
Test #9:
score: 5
Accepted
time: 4ms
memory: 19148kb
input:
9328450690 3
output:
2541
result:
ok 1 number(s): "2541"
Test #10:
score: 5
Accepted
time: 0ms
memory: 19416kb
input:
9775065820 2
output:
101083
result:
ok 1 number(s): "101083"
Test #11:
score: 5
Accepted
time: 0ms
memory: 19516kb
input:
948459050000 3
output:
11116
result:
ok 1 number(s): "11116"
Test #12:
score: 5
Accepted
time: 0ms
memory: 19620kb
input:
993120563000 2
output:
1006727
result:
ok 1 number(s): "1006727"
Test #13:
score: 5
Accepted
time: 0ms
memory: 19552kb
input:
93781484300000 3
output:
49275
result:
ok 1 number(s): "49275"
Test #14:
score: 5
Accepted
time: 3ms
memory: 19428kb
input:
98250912400000 2
output:
9958807
result:
ok 1 number(s): "9958807"
Test #15:
score: 5
Accepted
time: 0ms
memory: 19608kb
input:
9272034040000000 3
output:
221661
result:
ok 1 number(s): "221661"
Test #16:
score: 5
Accepted
time: 5ms
memory: 19624kb
input:
9981231040000000 2
output:
100122721
result:
ok 1 number(s): "100122721"
Test #17:
score: 5
Accepted
time: 0ms
memory: 19636kb
input:
942817384000000000 3
output:
1016053
result:
ok 1 number(s): "1016053"
Test #18:
score: 5
Accepted
time: 0ms
memory: 19424kb
input:
987478897000000000 2
output:
994718860
result:
ok 1 number(s): "994718860"
Test #19:
score: 5
Accepted
time: 0ms
memory: 19184kb
input:
932205945000000000 2
output:
966488284
result:
ok 1 number(s): "966488284"
Test #20:
score: 5
Accepted
time: 0ms
memory: 19528kb
input:
992520149596833024 2
output:
997253882
result:
ok 1 number(s): "997253882"
Extra Test:
score: 0
Extra Test Passed