Cod sursa(job #1831080)

Utilizator andrei.m1Macrineanu Andrei-Laurentiu andrei.m1 Data 17 decembrie 2016 14:19:24
Problema Ciurul lui Eratosthenes Scor 0
Compilator c Status done
Runda Arhiva educationala Marime 0.97 kb
#include <stdio.h>
#include <stdlib.h>
char prim[1250001];

//0010 0000 | 0100 0000 | 0000 0000

void setbit(int poz)
{
    prim[poz/8]|=1<<(poz%8);
}
int getbit(int poz)
{
    char x=1,mask;
    x=x<<(poz%8);
    mask=prim[poz/8];
    if((x&mask)==0)
        return 0;
    return 1;
}
int main()
{
    freopen("difprim.in","r",stdin);
    freopen("difprim.out","w",stdout);
    unsigned long a,b,i,j,sol1=-1,sol2=-1,x=-1,y=-1;
    scanf("%lu",&a);
    scanf("%lu",&b);
    setbit(1);
    for(i=3;i<=b;i=i+2)
        if(getbit(i)==0)
            for(j=i+i;j<=b;j=j+i)
                setbit(j);
    if(a<=2)
        y=2;
    i=a;
    if(i%2==0)
        i++;
    for(;i<=b;i=i+2)
    {
        if(getbit(i)==0)
            x=y,y=i;
        if(x!=-1 && y!=-1)
            if((y-x)>(sol2-sol1))
                sol1=x,sol2=y;
    }
    if(sol1!=-1 && sol2!=-1)
    printf("%lu %lu",sol1,sol2);
    else
        printf("%d",-1);
    return 0;
}