第一段代码是可以AC的
#include<bits/stdc++.h>
using namespace std;
const int N = 1e7;
int n;
string x;
int cnt;
int prime[N];
bool st[N]={1,1};
int ans=-1;
void oula()
{
for(int i=2;i<=N;i++)
{
if(st[i]==0)
prime[cnt++] = i;
for(int j=0;prime[j]*i<=N;j++)
{
st[i*prime[j]] = 1;
if(i%prime[j]==0)
break;
}
}
}
void dfs(int p)
{
if(p==x.size())
{
if(st[stoi(x)]==0)
ans = stoi(x);
return;
}
if(x[p]=='*')
{
for(int i=0;i<=9;i++)
{
if(ans == -1)
{
x[p] = '0'+i;
dfs(p+1);
x[p] = '*';
}
}
}
else
{
dfs(p+1);
}
}
int main()
{
oula();
cin>>n;
for(int i=1;i<=n;i++)
{
ans=-1;
cin>>x;
dfs(0);
cout<<ans<<endl;
}
return 0;
}
第二段代码只有task2部分对的,134全错
#include<bits/stdc++.h>
using namespace std;
const int N = 1e7;
int n;
string x;
int cnt;
int prime[N];
bool st[N];
int ans=-1;
void oula()
{
for(int i=2;i<=N;i++)
{
if(st[i]==0)
prime[cnt++] = i;
for(int j=0;prime[j]*i<=N;j++)
{
st[i*prime[j]] = 1;
if(i%prime[j]==0)
break;
}
}
}
void dfs(int p)
{
if(p==x.size())
{
if(st[stoi(x)]==0)
ans = stoi(x);
return;
}
if(x[p]=='*')
{
for(int i=0;i<=9;i++)
{
if(ans == -1)
{
x[p] = '0'+i;
dfs(p+1);
x[p] = '*';
}
}
}
else
{
dfs(p+1);
}
}
int main()
{
oula();
st[0] = 1;
st[1] = 1;
cin>>n;
for(int i=1;i<=n;i++)
{
ans=-1;
cin>>x;
dfs(0);
cout<<ans<<endl;
}
return 0;
}
只有欧拉筛st数组的0和1写的方式不同,到底是为什么