来源:JSOI2018
#includeusing namespace std; int i,j,s=1,k=1,n,m,a[25][25],h,b[405],x,y; bool fan(int c) { bool f=1; if(c<=1) return false; for(i=2;i*i<=c;i++) { if(c%i==0) { f=0; break; } } if(f) return true; else return false; } int main() { //取前400个,因为n<=20,则n*n<=400 cin>>n>>x>>y; m=n/2; for(k=1;k<=m;k++) { for(j=k;j<=n-k+1;j++) { a[k][j]=s++; } for(i=k+1;i<=n-k+1;i++) { a[i][n-k+1]=s++; } for(j=n-k;j>=k;j--) { a[n-k+1][j]=s++; } for(i=n-k;i>=k+1;i--) { a[i][k]=s++; } } if(n%2) { a[m+1][m+1]=n*n; } int num=1,c=2; while(num<=400) { if(fan(c)) { b[num++]=c; } c++; } cout< 思考过程:先按题目进行排位置,再把每一个位置上的自然数经函数改为质数,再取a[x][y]



