Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <fstream>
- #include <bitset>
- using namespace std;
- ifstream fin("memory004.in");
- ofstream fout("memory004.out");
- struct secv { unsigned short s=0,d=0;};
- bitset<10001> prim; // prim[i] == 1 - neprim / prim[i] == 0 - prim
- secv P[1002],M[1002],U[1002],C[1002];
- int main()
- {
- unsigned short n,m,a;
- fin>>n>>m;
- prim[0] =prim[1] = 1;
- for (int i = 4; i <= 10000; i += 2)
- prim[i] = 1;
- for (int i = 3; i * i <= 10000; i += 2) {
- if (prim[i] == 0) {
- for (int j = i * i; j <= 10000; j += i)
- prim[j] = 1;
- }
- }
- for(int i=1;i<=n;i++)
- for(int j=1;j<=m;j++)
- {
- fin>>a;
- if(prim[a]==0)
- {
- if(C[j].s==0)
- C[j].s=C[j].d=i;
- else C[j].d=i;
- if(C[j].d-C[j].s>=M[j].d-M[j].s)
- M[j]=C[j];
- if(C[j].s==1) P[j]=C[j];
- if(C[j].d==n) U[j]=C[j];
- }
- else C[j].s=C[j].d=0;
- }
- int l=0,lmax=0;
- for(int j=1;j<=m;j++)
- {
- if(P[j].s==1 && (j==1 || U[j-1].d==n))
- { l=l+P[j].d-P[j].s+1;
- if(l>lmax) lmax=l;
- }
- else l=P[j].d-P[j].s+1;
- if(U[j].d!=n) l=0;
- else if(U[j].s!=1) l=U[j].d-U[j].s+1;
- if(M[j].s!=1 && M[j].d!=n)
- if(M[j].d-M[j].s+1>lmax) lmax=M[j].d-M[j].s+1;
- }
- fout<<lmax;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement