五个点全是TLE,用的埃筛,怎么办?
查看原帖
五个点全是TLE,用的埃筛,怎么办?
646318
Switch_1024楼主2022/1/27 20:59
#include<bits/stdc++.h>
using namespace std;
bool a[100000001];
int n,q,y[1000001];//最大范围,询问次数,查询行数,查询表; 
int main (){
	cin>>n>>q;
	for (int k=1;k<=q;k++)
	{
		cin >>y[k];
	}
	for (int i=2;i<=n;i++)
	{
		if (! a[i])//如果未标记; 
		{
			
			for (int j=i<<1;j<=n;j=j+i)//把i的倍数进行标记;
			{
				if(!a[j])
					a[j]=1;
			}
		}
	}	
	for (int k=1;k<=q;k++)//找y[k] 
	{
		int l=y[k];
		for (int j=2;j<=n;j++)//跳至此处; 
		{
			if (! a[j])	//找到素数; 
			{
				l--;
				if(l==0)//找到第l个; 
				{
					printf ("%d\n",j);
					break;//跳出内for循环; 
				}
			}			
		} 
	}
	return 0;
}

以上代码

2022/1/27 20:59
加载中...