Pagini recente » Cod sursa (job #1749927) | Cod sursa (job #171459) | Cod sursa (job #1712330) | caress | Cod sursa (job #657472)
Cod sursa(job #657472)
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("ciur.in");
ofstream fout("ciur.out");
int main()
{
int n, nr = 2, lim;
fin >> lim;
double sqr = sqrt(lim);
bool * isPrime = new bool[lim+1];
memset(isPrime, 0, sizeof(bool)*(lim+1));
for(int x = 1; x <= sqr; x++)
{
for(int y = 1; y <= sqr; y++)
{
n = 4 * x * x + y * y;
if(n <= lim && (n % 12 == 1 || n % 12 == 5))
isPrime[n] = !isPrime[n];
n = 3 * x * x + y * y;
if(n <= lim && n % 12 == 7)
isPrime[n] = !isPrime[n];
n = 3 * x * x - y * y;
if(x > y && n <= lim && n % 12 == 11)
isPrime[n] = !isPrime[n];
}
}
for(int i = 5; i <= sqr; i+=2)
{
if(isPrime[i])
{
for(int k = i*i; k <= lim; k+=i*i)
isPrime[k] = false;
}
}
for(int i = 5; i <= lim; i+=2)
if(isPrime[i]) ++nr;
fout << nr;
delete[] isPrime;
return 0;
}