Cod sursa(job #2642285)

Utilizator am_I_reallymeMircea Filat am_I_reallyme Data 14 august 2020 14:30:11
Problema Ciurul lui Eratosthenes Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.78 kb
#include <bits/stdc++.h>
using namespace std;
typedef unsigned long long ull;
typedef long long ll;
struct my_timer{
	chrono::time_point<chrono::high_resolution_clock> start;
	my_timer():
	start(chrono::high_resolution_clock::now()){}
	~my_timer(){
		std::chrono::duration<double> diff = chrono::high_resolution_clock::now() - start;
		clog<<diff.count()<<"s\n";
	}
};

char ciur[2000000/16 + 1];
int main()
{
	freopen("ciur.in","r",stdin);
	freopen("ciur.out","w",stdout);
	int n;
	scanf("%d",&n);
	int ret = 1;//n >= 2
	int i=1;
	for(; (i*(i+1)<<1) + 1 <= n;++i){
		if((ciur[i>>3] & (1<<(i&7))) == 0){
			++ret;
			for(int j=i*(i+1)<<1;(j<<1) + 1<=n;j += (i<<1) + 1){
				ciur[j>>3] |= (1<<(j&7));
			}
		}
	}
	while((i<<1) + 1 <= n)
		ret += !(ciur[i>>3] & (1 << (i & 7))), ++i;
	printf("%d",ret);
}