Pagini recente » Cod sursa (job #483821) | Cod sursa (job #1999427) | Cod sursa (job #759970) | Cod sursa (job #1598265) | Cod sursa (job #822769)
Cod sursa(job #822769)
#include <fstream>
#include <cmath>
using namespace std;
ifstream cin ("ciur.in");
ofstream cout ("ciur.out");
const int MAXN=2000005;
bool is_prime[MAXN];
int N,SQRT,nrt;
int main () {
cin>>N; SQRT=(int)sqrt (N)+1;
int value;
for (int x=1; x<=SQRT; ++x)
for (int y=1; y<=SQRT; ++y) {
value=((x*x)<<2)+(y*y);
if (value<=N && (value%12==1 || value%12==5))
is_prime[value]=!is_prime[value];
value-=x*x;
if (value<=N && value%12==7)
is_prime[value]=!is_prime[value];
value-=(y*y)<<1;
if (x>y && value<=N && value%12==11)
is_prime[value]=!is_prime[value];
}
for (int i=5; i<=SQRT; ++i)
if (is_prime[i])
for (int j=i*i; j<=N; j+=i*i)
is_prime[j]=false;
nrt=2;
for (int i=5; i<=N; ++i)
if (is_prime[i])
++nrt;
cout<<nrt;
return 0;
}