ZJYYC1179

# ZJYYC1179. 孤独的素数
时间限制: 
C/C++ 1s
其他语言 2s
空间限制: 
C/C++ 32MB
其他语言 64MB
题目描述
在一个 

n 行 

m 列的矩阵王国中,生活着一些整数,其中一些是素数,一些不是素数。如果一个素数的上下左右、左上、右上、左下、右下相邻的数中都没有素数,我们就认为这是一个孤独的素数。
比如:一个 
3
3 行 
5
5 列的矩阵如下。
3

8

10
10 
9

5
5
6

10
10 
2

4

13
13
8

8

9

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;
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值