taozhenJ 2024-08-15 18:11 采纳率: 57.9%
浏览 7
已结题

小Z找质数(标签-矩阵)

有N行M列的整数,小Z从第一行第一列开始观察,他有一个奇怪的想法,当他找到第一个质数时,他想知道,与这个质数在同一行,同一列、同一斜线上的数也是质数的个数有多少个?(包括第一个质数)由于矩阵可能很大,请你帮助小Z实现这个想法。

  • 写回答

2条回答 默认 最新

  • 一直免费一直爽 2024-08-15 18:11
    关注

    以下回复参考:皆我百晓生券券喵儿等免费微信小程序作答:

    #include <iostream>
    #include <vector>
    #include <cmath>
    
    bool is_prime(int num) {
        if (num <= 1) return false;
        if (num == 2) return true;
        if (num % 2 == 0) return false;
        for (int i = 3; i <= std::sqrt(num); i += 2) {
            if (num % i == 0) return false;
        }
        return true;
    }
    
    int count_primes_in_matrix(const std::vector<std::vector<int>>& matrix, int row, int col) {
        int N = matrix.size();
        int M = matrix[0].size();
        int count = 0;
    
        // Check the same row
        for (int j = 0; j < M; ++j) {
            if (is_prime(matrix[row][j])) count++;
        }
    
        // Check the same column
        for (int i = 0; i < N; ++i) {
            if (is_prime(matrix[i][col])) count++;
        }
    
        // Check the main diagonal
        int start_row = row - std::min(row, col);
        int start_col = col - std::min(row, col);
        for (int i = 0; i <= std::min(N - start_row - 1, M - start_col - 1); ++i) {
            if (is_prime(matrix[start_row + i][start_col + i])) count++;
        }
    
        // Check the secondary diagonal
        start_row = row + std::min(N - row - 1, col);
        start_col = col - std::min(N - row - 1, col);
        for (int i = 0; i <= std::min(start_row, M - start_col - 1); ++i) {
            if (is_prime(matrix[start_row - i][start_col + i])) count++;
        }
    
        return count;
    }
    
    int main() {
        int N, M;
        std::cin >> N >> M;
        std::vector<std::vector<int>> matrix(N, std::vector<int>(M));
        for (int i = 0; i < N; ++i) {
            for (int j = 0; j < M; ++j) {
                std::cin >> matrix[i][j];
            }
        }
    
        for (int i = 0; i < N; ++i) {
            for (int j = 0; j < M; ++j) {
                if (is_prime(matrix[i][j])) {
                    int count = count_primes_in_matrix(matrix, i, j);
                    std::cout << "质数(" << matrix[i][j] << ")在矩阵中同行、同列和对角线上的质数个数为: " << count << std::endl;
                    return 0;
                }
            }
        }
    
        std::cout << "没有找到质数" << std::endl;
        return 0;
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 10月15日
  • 已采纳回答 10月7日
  • 创建了问题 8月15日

悬赏问题

  • ¥15 Boost库编译出错。
  • ¥15 使用docker安装chemex后无法启动
  • ¥15 关于#vue.js#的问题:word excel和ppt预览问题语言-javascript)
  • ¥15 Apache显示系统错误3该如何解决?
  • ¥30 uniapp小程序苹果手机加载gif图片不显示动效?
  • ¥20 js怎么实现跨域问题
  • ¥15 C++dll二次开发,C#调用
  • ¥15 请教,如何使用C#加载本地摄像头进行逐帧推流
  • ¥15 Python easyocr无法顺利执行,如何解决?
  • ¥15 为什么会突然npm err!啊