求助!为什么线性筛都能TLE?那该咋办QWQ
查看原帖
求助!为什么线性筛都能TLE?那该咋办QWQ
593753
LukeSu楼主2022/5/6 20:09
#include<bits/stdc++.h>  /*参考第二高赞题解写的,但不知道为什么自己的代码TLE了,用线性筛应该更快才对啊。*/
#define QWQ cin.tie(0)->sync_with_stdio(false);
using namespace std;

int a[] = {1, 3, 7, 9};   //存取非首位的数
int n;
bitset<123456789> st, f;
int prime[123456789], cnt = 0;

void build_Prime(){  //线性筛建一个素数表f
	for(int i = 2; i <= 123456789; i++){
		if(!st[i]){
			prime[cnt++] = i;
			f[i] = true;  //建表
		}
		for(int j = 0; prime[j] <= 123456789 / i; j++){
			st[prime[j] * i] = true;
			if(i % prime[j] == 0) break;
		}
	}
}

void dfs(int u, int sum){
	int t = 0;
	if(sum == n){
		cout << u << endl;
		return;
	}
	else{
		for(int i = 0; i <= 3; i++){
			t = u * 10 + a[i];
			if(f[t]) dfs(t, sum + 1);
		}
	}
}

int main(){
	QWQ
	build_Prime();
	cin >> n;
	dfs(2, 1);   //从是质数的首位开始dfs
	dfs(3, 1);
	dfs(5, 1);
	dfs(7, 1);
	
	return 0;
}
2022/5/6 20:09
加载中...