Does anyone have any tips for this problem?

My code is time limit exceeded
#define MAX 86028122
bitset <MAX> primo;
long long int lista[5000001];
long long int cont;

void crivo(){

    long long int i,j;
    long long int limite;
    for(i=2;i<MAX;i++) primo.set(i,1);
    for(i=4;i<MAX;i=i+2) primo.set(i,0);
    lista[0]=2;
    cont=1;
    limite = sqrt(MAX);
    for(i=3;i<=limite;i=i+2){
        if(primo.test(i)){
            lista[cont++]=i;
            for(j=i*i;j<MAX;j=j+i) primo.set(j,0) ;
        }
    }

    for(i=limite+1;i<MAX;i++)
        if(primo[i]==1) lista[cont++]=i;

}

Wladimir Araujo Tavares
*Federal University of CearĂ¡

*

-- 
You received this message because you are subscribed to the Google Groups 
"Algorithm Geeks" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/algogeeks?hl=en.

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
#include <iostream>
#include <map>
#include <vector>
#include <queue>
#include <stack>
#include <algorithm>
#include <bitset>
#define REP(i,n) for(i=0;i<n;i++)
#define MAX 86028122
using namespace std;

bitset <MAX> primo;
//char primo[MAX];
long long int lista[5000001];
long long int cont;

void crivo(){
	
	long long int i,j;
	long long int limite;
	for(i=2;i<MAX;i++) primo.set(i,1);
	for(i=4;i<MAX;i=i+2) primo.set(i,0);
	lista[0]=2;
	cont=1;
	limite = sqrt(MAX);
	for(i=3;i<=limite;i=i+2){
		if(primo.test(i)){
			lista[cont++]=i;
			for(j=i*i;j<MAX;j=j+i) primo.set(j,0) ;
		}
	}
	
	for(i=limite+1;i<MAX;i++)
		if(primo[i]==1) lista[cont++]=i;
	
}


int main(){
	
	int q,x;

	crivo();
	
	cin >> q;
	while(q--){
		cin >> x;
		cout << lista[x-1] << endl; 
	}
	
	
  return 0;
}

Reply via email to