Pagini recente » Cod sursa (job #1389387) | Cod sursa (job #1548706) | Cod sursa (job #562834) | Cod sursa (job #590019) | Cod sursa (job #144708)
Cod sursa(job #144708)
#include <stdio.h>
#define Nmax 200001
#define bit 25
int n, i, j, p[Nmax], N=1, rez=1;
struct nod { int nr; nod * urm; } * que, *last;
void ciur(int);
int main()
{
fscanf(fopen("ciur.in", "r"), "%d", &n);
ciur(n);
freopen("ciur.out", "w", stdout);
printf("%d\n", rez);
for (; que; que=que->urm)
printf("%d ", que->nr);
fclose(stdout);
return 0;
}
void ciur(int n)
{
que=new nod;
que->nr=2;
que->urm=NULL;
last=que;
for (i=3; i<=n; i+=2)
if (!(p[ ((i-1)>>1) / bit ] & (1<< (((i-1)>>1)%bit))))
{
rez++;
if (N<1000)
{
N++;
nod * q= new nod;
q->nr=i;
q->urm=NULL;
last->urm=q;
last=q;
}
else
{
nod * q=que;
que=que->urm;
delete q;
q=new nod;
q->nr=i;
q->urm=NULL;
last->urm=q;
last=q;
}
for (j=3*i; j<=n; j+= i<<1 )
p[ ((j-1)>>1) / bit ] |= 1 << (((j-1)>>1)%bit);
}
}