Pagini recente » Cod sursa (job #2655737) | Cod sursa (job #1616020) | Cod sursa (job #2303526) | Cod sursa (job #580842) | Cod sursa (job #2423459)
#include <fstream>
#include <iostream>
using namespace std;
ifstream fin ("elimin_prime.in");
ofstream fout ("elimin_prime.out");
const int N = 1E6 + 2;
bool sieve[N];
void Create_Sieve ()
{
sieve[1] = sieve[2] = 1;
int i, j;
for (i = 4; i <= N; i += 2)
sieve[i] = 1;
for (i = 3; i * i <= N; i += 2)
if (sieve[i] == 0)
for (j = i * i; j <= N; j += 2 * i)
sieve[i] = 1;
}
struct nod
{
int info;
nod *leg;
};
nod *L, *U;
int n;
int ans[N], k;
void Delete (nod * p)
{
nod *q;
q = p -> leg;
p -> leg = q -> leg;
}
void InsEnd (nod *p, int x)
{
nod *q;
q = new nod;
q -> info = x;
q -> leg = p -> leg;
p -> leg = q;
U = q;
}
void DeleteInside (nod *p)
{
nod *q;
q = p -> leg;
p -> leg = q -> leg;
delete q;
}
void DeleteFirst()
{
nod *p;
p = L;
L = L -> leg;
delete p;
}
void Solve ()
{
int x, cnt;
fin >> n;
fin >> x;
L = new nod;
U = new nod;
L -> info = x;
L -> leg = NULL;
for (int i = 2; i <= n; i++)
{
fin >> x;
InsEnd (U, x);
}
while (k < n)
{
cnt = 1;
nod *p, *r;
for (p = L; p != NULL; p = p -> leg)
{
if (cnt <= 3)
{
ans[++k] = L -> info;
DeleteFirst();
}
else if (sieve[cnt] == 0)
{
ans[++k] = p -> info;
DeleteInside(r); /// sterge de la p
}
else r = p;
cnt++;
}
}
for (int i = 1; i <= k; i++)
fout << ans[i] << " ";
fout << "\n";
}
int main()
{
Solve();
return 0;
}