Pagini recente » Cod sursa (job #856552) | Cod sursa (job #1755469) | Cod sursa (job #2488191) | Cod sursa (job #2135352) | Cod sursa (job #2488597)
#include<iostream>
#include<stdio.h>
#include<algorithm>
using namespace std;
int prim(int n)
{
if(n == 0 || n == 1)
return 0;
if(n == 2)
return 1;
if(n % 2 == 0)
return 0;
else
for(int d = 3; d * d <= n; d += 2)
if(n % d == 0)
return 0;
return 1;
}
struct mama{
int capat;
int nrelemsecventa;
int elem[1001];
}a[1001];
bool comp(mama a, mama b)
{
if(a.nrelemsecventa > b.nrelemsecventa)
return true;
else
return false;
}
int v[1001], b[1001], i, j, st, n, dr, mid, rez, k, cnt;
int main()
{
freopen("scmax.in", "r", stdin);
freopen("scmax.out", "w", stdout);
int max = -1;
cin >> n;
for(i = 1; i <= n; i ++)
{
cin >> b[i];
if(prim(b[i]) == 1)
{
k ++;
v[k] = b[i];
}
}
for(i = n; i >= 2; i --)
{
cnt = 1;
a[i].capat = v[i];
a[i].elem[1] = v[i];
for(int j = i - 1; j >= 1; j --)
{
st = 1;
dr = j;
rez = -1;
while(st <= dr)
{
mid = (st + dr) / 2;
if(v[mid] > a[i].capat)
dr = mid - 1;
else
{
rez = mid;
st = mid + 1;
}
}
if(rez != -1)
{
cnt ++;
a[i].elem[cnt] = v[rez];
a[i].capat = v[rez];
}
}
a[i].nrelemsecventa = cnt;
if(max < cnt)
max = cnt;
}
sort(a + 1, a + k + 1, comp);
cout << max - 1;
cout << endl;
for(j = a[1].nrelemsecventa; j >= 1; j --)
cout << a[1].elem[j] << " ";
return 0;
}