理论上跑的速度比较快,但是到了稍微大了一点的空间就会炸,求怎么缩空间。
#include<stdio.h>
#define N 100000009
bool is[N];
int pre[N], nxt[N];
int pri[N], cnt;
inline int read()
{
register int ret = 0, f = 1;
register char ch = getchar();
while (ch < '0' || ch > '9')
(ch == '-') ? f = -1 : 0, ch = getchar();
while (ch >= '0' && ch <= '9')
ret = (ret << 1) + (ret << 3) + (ch ^ 48), ch = getchar();
return ret * f;
}
inline void init(int x)
{
if (!pre[x] && !nxt[x])
pre[x] = x - 1, nxt[x] = x + 1;
}
inline void do_prime(register int n)
{
is[1] = 1;
for (register int i = 2, j;i <= n;i = nxt[i])
{
if (is[i])
continue;
init(i);
pri[++ cnt] = i;
for (j = i * i;j <= n;j += i)
{
if (!is[j])
{
is[j] = 1;
init(j), init(j + 1), init(j - 1);
nxt[pre[j]] = nxt[j];
pre[nxt[j]] = pre[j];
}
}
}
}
int main()
{
register int n = read();
// register int k = read();
do_prime(n);
printf("114514");
// ++ k;
// while (-- k)
// printf("%d\n", pri[read()]);
return 0;
}