同样一段意思的代码为什么这样写就能过
#include <iostream>
#include <vector>
#include <algorithm>
#define int long long
using namespace std;
vector<int> prime; //记录比i小的所有素数
void get_prime(int n)
{
vector<bool> mark(n+1);
//建立一个长度为n+1的动态数组用于标记是否不为素数
//初始化为0,默认全部为素数;
mark[1]=1;//1不是素数
for(int i=2;i<=n;i++)
{
if(mark[i]==0)prime.push_back(i);
for(auto j:prime)
{
if((long long)j*i>n)break;
mark[i*j]=1;
if(i%j==0)break;
}
}
return;
}
signed main()
{
ios_base::sync_with_stdio(0);cin.tie(0);
int n,q;
cin>>n>>q;
int question;
get_prime(n);
while(q--)
{
cin>>question;
cout<<prime[question-1]<<"\n";
}
return 0;
}
而这样写只有60
#include <iostream>
#include <vector>
#include <algorithm>
#define int long long
using namespace std;
vector<bool> mark(100000005);
//建立一个长度为n+1的动态数组用于标记是否不为素数
//初始化为0,默认全部为素数;
vector<int> prime; //记录比i小的所有素数
void get_prime(int n)
{
mark[1]=1;//1不是素数
for(int i=2;i<=n;i++)
{
if(mark[i]==0)prime.push_back(i);
for(auto j:prime)
{
if(j*i>n)break;
mark[i*j]=1;
if(i%j==0)break;
}
}
return;
}
signed main()
{
int n,q;
std::ios::sync_with_stdio(0);
cin>>n>>q;
int question;
get_prime(n);
for(int i=0;i<q;i++)
{
cin>>question;
cout<<prime[question-1]<<endl;
}
return 0;
}
(以上两段代码理论上只有输入部分有点差异吧)