只有40分,求调

B3738 [信息与未来 2018] 素数方阵

renzhanwen @ 2024-09-19 22:06:42

40分记录

#include<bits/stdc++.h>
using namespace std;
int n,x,y,m=-1,i=1,j=1,w=1;
bool isprime[10000000],vis[100][100];
vector<int> primes;
int main()
{
    cin>>n>>x>>y;
    for(int i=1;i<=100000;i++)
        isprime[i]=true;
    for(int i=2;i<=100000;i++)
    {
        if(isprime[i])
            primes.push_back(i);
        for(int j=0;j<primes.size();j++)
        {
            int p=primes[j];
            if(i*p>100000)
                break;
            isprime[i*p]=false;
            if(i%p==0) 
                break;
        }
    }
    while(m<n*n)
    {
        vis[i][j]=true;
        m++;
        if(x==i&&y==j)
        {
            cout<<primes[m];
            return 0; 
        }
        if(w==1) 
        {
            if(j+1<=n&&!vis[i][j+1])
                j++;
            else
                w=2,i++;
            continue;
        }
        if(w==2)
        {
            if(i+1<=n&&!vis[i+1][j])
                i++;
            else
                w=3,j--;
            continue;
        }
        if(w==3)
        {
            if(j-1>=1&&!vis[i-1][j])
                j--;
            else
                w=4,i--;
            continue;
        }
        if(i-1>=1&&!vis[i-1][j])
            i--;
        else
            w=1,j++;
    }
    return 0;
}

|