5203 蛇形素数矩阵

    中等-    时间限制:1000MS  内存限制:128MB  分数:100  OI排行榜得分:16(0.1*分数+2*难度)

  二维数组   简单模拟   埃筛和欧筛   AI编程素养集训课 

描述

把前 n^2 个素数从左上角开始按右、下、左、上、右、下、左、上……的顺序填入 n×n 的方阵就得到了蛇形素数方阵。以下是 n=4 和 n=5 的蛇形素数方阵:

image.pngimage.png

给出 n,你的任务是求出 n×n 的蛇形素数方阵,并输出其中某个方格中的数值。

素数,又称质数,是指除 1 和其自身之外,没有其他约数的大于 1 的正整数。

输入描述

输入一行三个正整数 n,x,y,整数之间使用空格分隔。

输出描述

输出一行一个整数,表示 n×n 蛇形素数方阵第 x 行第 y 列中的数字。

样例输入 1 

5 2 4

样例输出 1 

67

提示

数据范围与提示:

所有数据满足 1≤x,y≤n≤20。

           AC代码           

#include<bits/stdc++.h>
using namespace std;
const int MAXSIZE = 1e5+10;
int prime[MAXSIZE],p_cnt=0;
bool flag[MAXSIZE];
int a[25][25];
int main(){
	for(int i=2;i<MAXSIZE;i++){
		if(!flag[i]) prime[++p_cnt] = i;
		for(int j=1;j<=p_cnt && i*prime[j]<MAXSIZE;j++){
			flag[i*prime[j]] = 1;
			if(i%prime[j]==0) break;
		}
	}
	int n,x,y;
	cin>>n>>x>>y;
	int row = 1,col = 1,k = 1;
	a[row][col] = k++;
	while(k<=n*n){
		while(col<=n-1 && !a[row][col+1]) a[row][++col]=k++;
		while(row<=n-1 && !a[row+1][col]) a[++row][col]=k++;
		while(col-1>0 && !a[row][col-1]) a[row][--col]=k++;
		while(row-1>0 && !a[row-1][col]) a[--row][col]=k++;
	}
	cout<<prime[a[x][y]];
	return 0;
}

  • 6
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值