# ZJYYC1179. 孤独的素数
时间限制:
C/C++ 1s
其他语言 2s
空间限制:
C/C++ 32MB
其他语言 64MB
题目描述
在一个
�
n 行
�
m 列的矩阵王国中,生活着一些整数,其中一些是素数,一些不是素数。如果一个素数的上下左右、左上、右上、左下、右下相邻的数中都没有素数,我们就认为这是一个孤独的素数。
比如:一个
3
3 行
5
5 列的矩阵如下。
3
3
8
8
10
10
9
9
5
5
6
6
10
10
2
2
4
4
13
13
8
8
8
8
9
9
6
6
3
3
这个矩阵中有
2
2 个素数,分别是第
1
1 行第
1
1 列的
3
3,和第
2
2 行第
3
3 列的
2
2。
请编程计算出,一个
�
n 行
�
m 列的矩阵中有多少个孤独的素数?
输入描述
测试样例由多组测试数据组成。
第
1
1 行有
2
2 个整数
�
n 和
�
m,代表矩阵的大小(
3
≤
�
,
�
≤
50
3≤n,m≤50)
接下来
�
n 行,每行有
�
m 个整数(这些整数是
1
−
1000
1−1000 之间的整数,含
1
1 和
1000
1000)
输出描述
输出
1
1 个整数,代表矩阵中孤独素数的个数。
测试样例1
输入
3 5
3 8 10 9 5
6 10 2 4 13
8 8 9 6 3
输出
2
以下是c++的实现流程
#include <iostream>
#include <math.h>
#include <stdio.h>
using namespace std;
bool isPrime(int num) {
if (num <= 1) {
return false;
}
for (int i = 2; i <= sqrt(num); i++) {
if (num % i == 0) {
return false;
}
}
return true;
}
bool isLonelyPrime(int matrix[][100], int row, int col, int n, int m) {
if (!isPrime(matrix[row][col])) {
return false;
}
int dx[] = {-1, -1, -1, 0, 0, 1, 1, 1};
int dy[] = {-1, 0, 1, -1, 1, -1, 0, 1};
for (int i = 0; i < 8; i++) {
int newRow = row + dx[i];
int newCol = col + dy[i];
if (newRow >= 0 && newRow < n && newCol >= 0 && newCol < m) {
if (isPrime(matrix[newRow][newCol])) {
return false;
}
}
}
return true;
}
int main() {
int n, m;
while(scanf("%d %d",&n,&m)!=EOF){
int matrix[100][100];
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
cin >> matrix[i][j];
}
}
int count = 0;
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
if (isLonelyPrime(matrix, i, j, n, m)) {
count++;
}
}
}
cout << count << endl;
}
return 0;
}