关于我想的一个新的质数方法
  • 板块学术版
  • 楼主Chr0n1CleC
  • 当前回复18
  • 已保存回复18
  • 发布时间2022/11/7 13:25
  • 上次更新2023/10/27 03:57:04
查看原帖
关于我想的一个新的质数方法
701221
Chr0n1CleC楼主2022/11/7 13:25

理论上跑的速度比较快,但是到了稍微大了一点的空间就会炸,求怎么缩空间。

#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;
}
2022/11/7 13:25
加载中...