• Codeforces Round #166 (Div. 2)


    B. Prime Matrix

    题意很简单,就是求从给定矩阵基础上构造一个素数矩阵需要最少进行多少次加1操作,所谓的素数矩阵是矩阵一行或者一列全为素数。这里可以换一个思路思考,我们可以找出矩阵某行(或某列)元素距其最近的素数的差值,然后对这些差进行排序,最小的数即为所求。当然我们需要预先求一个素数数组存储起来,这也是需要学会的。

     1 #include<iostream>
     2 #include<algorithm>
     3 #define N 1000011
     4 using namespace std;
     5 bool p[N];
     6 int s[N];
     7 int x[501][501];
     8 int r[501], c[501];
     9 void init()//建立一个素数表
    10 {
    11     memset(p, 1, sizeof(p));
    12     for (int i = 2; i*i < N; i++)
    13     {
    14         for (int j = i; i*j < N; j++)
    15             p[i*j] = 0;
    16     }
    17     s[0] = 0;
    18     for (int i = 2; i<N; i++)
    19     if (p[i])
    20         s[++s[0]] = i;
    21 }
    22 int solve(int x)//求已知数到最近素数的距离
    23 {
    24     int pos = lower_bound(s + 1, s + 1 + s[0], x) - s;
    25     return s[pos] - x;
    26 }
    27 int main()
    28 {
    29     int n, m,i,j,ans;
    30     init();
    31     while (cin >> n >> m)
    32     {
    33         memset(r, 0, sizeof(r));
    34         memset(c, 0, sizeof(c));
    35         for (i = 1; i <= n; i++){
    36             for (j = 1; j <= m; j++)
    37             {
    38                 cin >> x[i][j];
    39                 r[i] += solve(x[i][j]);
    40                 c[j] += solve(x[i][j]);
    41             }
    42         }
    43         sort(r + 1, r + 1 + n);
    44         sort(c + 1, c + 1 + m);
    45         ans = min(r[1], c[1]);
    46         cout << ans << endl;
    47         return 0;
    48     }
    49 }
  • 相关阅读:
    011 Vue _Object.defineProperty
    JavaScript中in操作符
    009el与data的两种写法
    ES6中的数组reduce()方法
    Vue中有两种数据绑定的方式:
    012 Vue 理解数据代理
    【angular基础教程】引入jQuery
    014 Vue中的事件处理
    010理解MVVM
    013 Vue中的数据代理
  • 原文地址:https://www.cnblogs.com/jzwong/p/4419840.html
Copyright © 2020-2023  润新知