Pagini recente » Cod sursa (job #1331988) | Cod sursa (job #1950451) | Cod sursa (job #3002621) | Cod sursa (job #3144168) | Cod sursa (job #2229195)
///1/2 = 0.5 = 50%
///1/2 + 1/3 - 1/6 = 2/3 = 0.(6) = 66%
///1/2 + 1/3 + 1/5 - 1/6 - 1/15 - 1/10 + 1/30 = 15/30 + 10/30 + 6/30 - 5/30 - 2/30 - 3/30 + 1/30 = 22/30 = 11/15 = 0.7(3) = 73%
///1/2 + 1/3 + 1/5 + 1/7 - 1/6 - 1/10 - 1/14 - 1/15 - 1/21 - 1/35 + 1/105 + 1/70 + 1/42 + 1/30 - 1/210 = 105/210 + 70/210 + 42/210 + 30/210 - 35/120 - 21/210 - 15/210 - 14/210 - 10/210 - 6/210 + 2/210 + 3/210 + 5/210 + 7/210 - 1/210 = 247/210 - 101/210 + 17/210 - 1/210 = 162/210 = 77%
#include <bits/stdc++.h>
using namespace std;
int primes[2000000 /8/4/3 + 1];
int main(void)
{
freopen("ciur.in", "r", stdin);
freopen("ciur.out", "w", stdout);
int N; scanf("%d", &N);
for(int ix = 1; ix<= 1; ix++)
{
auto Start = clock();
int i, j, sqrt_N = sqrt(N), iBitNumber, iIndex, iBit, jBitNumber, jIndex, jBit, count = 2;
for(i = 5; i < sqrt_N; i += 4)
{
iBitNumber = i / 3 - 1, iIndex = iBitNumber >> 5, iBit = 1 << (iBitNumber & 31);
if((primes[iIndex] & iBit) == 0)
{
for(j = i * i; j < N; j += i << 2)
{
jBitNumber = j / 3 - 1;
primes[jBitNumber >> 5] |= 1 << (jBitNumber & 31);
j += i << 1;
if(j >= N) break;
jBitNumber = j / 3 - 1;
primes[jBitNumber >> 5] |= 1 << (jBitNumber & 31);
}
}
i += 2;
iBit <<= 1;
if((primes[iIndex] & iBit) == 0)
{
for(j = i * i; j < N; j += i << 1)
{
jBitNumber = j / 3 - 1;
primes[jBitNumber >> 5] |= 1 << (jBitNumber & 31);
j += i << 2;
if(j >= N) break;
jBitNumber = j / 3 - 1;
primes[jBitNumber >> 5] |= 1 << (jBitNumber & 31);
}
}
}
for(i = 5; i < N; i += 6)
{
iBitNumber = i / 3 - 1, iIndex = (i / 3 - 1) >> 5, iBit = (1 << (iBitNumber & 31));
count += ((primes[iIndex] & (iBit )) == 0);
count += ((primes[iIndex] & (iBit << 1)) == 0);
}
//printf("%d =>", count);
printf("%d", count);
auto End = clock();
auto Time = 1000.0 * (End - Start) / CLOCKS_PER_SEC;
//cout << Time << "ms\n";
}
return 0;
}