Prime Matrix

  【B.Prime Matrix】

  http://www.codeforces.com/contest/271/problem/B

  题目大意:n×m的格子,每次操作可以将一个格子中的数字加1,问最少操作次数使得存在一行或一列全为质数。

  预处理出每个格子需要多少次操作成为质数,然后求最小行、列和即可。素数筛表即可,注意多筛一些。

  一开始没打素数表,直接+1 +1的判断,导致超时...然后就有了上一篇文章...


 1 #include <iostream>
 2 #include <cmath>
 3 #define min(a,b) (((a)<(b))? (a):(b))
 4 
 5 const  int MAXN=101000;
 6 bool flag[MAXN];
 7 int prime[MAXN/3],pi,num[501][501];
 8 using namespace std;
 9 bool isPrime(int x)
10 {//不打素数表的时候用来判断一个数是否为素数
11     if(x==1)
12         return false;
13     if (x==2)
14         return true;
15     for (int i=2;i<=(int)sqrt((long double)x);i++)
16     {
17         if (x%i==0)
18             return false;
19     }
20     return true;
21 }
22 void GetPrime_Improved()
23 {    //打素数表.任何一个数与其它所有素数的乘积必然也不是素数(这是因为每个合数必有一个最小素因子)。
24     //初始置为false,素数为false,非素数为true
25     int i,j;
26     pi=0;
27     memset(flag,false,sizeof(flag));
28     flag[1]=true;
29     for (i=2;i<MAXN;i++)
30     {
31         if (!flag[i])
32             prime[pi++]=i;
33         for ( j = 0 ; ( j<pi )&&( i * prime[j]<MAXN ) ; j++)
34         {
35             flag[i*prime[j]]=true;
36             if ( i % prime[j] == 0) //保证每个非素数只被筛一次
37                 break;
38         }
39     }
40 }
41 int main()
42 {
43     int i,j,k,n,m,temp,rowCount,columnCount,countMin=0x7FFFFFFF;
44     cin>>n>>m;
45     GetPrime_Improved();    
46     for (i=0;i<n;i++)
47         for (j=0;j<m;j++)
48         {
49             cin>>temp;
50             k=0;
51             while (flag[temp+k])
52                 k++;
53             num[i][j]=k;    
54         }
55     for (i=0;i<n;i++)
56         {
57             rowCount=0;
58             for (j=0;j<m;j++)
59                 rowCount+=num[i][j];
60             countMin=min(rowCount,countMin);
61         }
62     for (j=0;j<m;j++)
63         {
64             columnCount=0;
65             for (i=0;i<n;i++)
66                 columnCount+=num[i][j];
67             countMin=min(columnCount,countMin);
68         }
69         cout<<countMin<<endl;
70     return 0;
71 }

 

posted @ 2013-02-17 23:47  丶Blank  阅读(260)  评论(0编辑  收藏  举报