萌新求问为何代码TLE
查看原帖
萌新求问为何代码TLE
249785
SS_Chara楼主2021/10/21 13:15
#include<bits/stdc++.h>
using namespace std;
const int N = 100001;
int p[N],np[N],ans[N][2],t[N];
bool vis[N];
int cntp = 0,ansp = 0;
void primecheck(int n){
	np[1] = 1;
	for(int i = 2;i<=n;i++){
		if(!np[i]) p[++cntp] = i;
		for(int j = 1;j<=cntp;j++){
			if(i*p[j]>n)break;
			np[i*p[j]] = 1;
			if(i%p[j]==0) break;
		}
	}
}
int main(){
	int n;
	scanf("%d",&n);
	primecheck(n<<1);
	for(int i = cntp;i;i--){
		int num = p[i];
		int k = 0;
		for(int j = 1;num*j<=n;j++){
			int cur = num*j;
			if(!vis[cur]) t[++k] = cur;
		}
		if(k&1){
			swap(t[2],t[k])	;
			k--;
		} 
		for(int j = 1;j<=k;j+=2){
			vis[t[j]] = vis[t[j+1]] = 1;
			ans[++ansp][0] = t[j];  
			ans[ansp][1] = t[j+1];
		}
	}
	printf("%d\n",ansp);
	for(int i = 1;i<=ansp;i++){
		printf("%d %d\n",ans[i][0],ans[i][1]);
	}
	return 0;
}

做法和题解感觉一样,写法也差不多?

但是n=99998的时候T了

本机测试,注释掉输出,程序0.1s结束。

大概率脑抽写错了出现死循环?但是萌新太菜了找不到...

求大佬不吝赐教

2021/10/21 13:15
加载中...