Pagini recente » Cod sursa (job #836065) | Cod sursa (job #1405072) | Cod sursa (job #1876951) | Cod sursa (job #3122525) | Cod sursa (job #2692805)
#include <fstream>
#include <bitset>
#include <vector>
#define nmax 2000000
using namespace std;
ifstream cin("ciur.in");
ofstream cout("ciur.out");
bitset <nmax + 1> seive;
vector <int> primeNumbers;
void ciur(int limit){
seive[0] = seive[1] = true;
for(int i = 4; i <= limit; i += 2){
seive[i] = true;
}
for(int i = 3; i * i <= limit; i += 2){
if(!seive[i]){
for(int j = i * i; j <= limit; j += 2 * i){
seive[j] = true;
}
}
}
for(int i = 1; i <= limit; ++i){
if(!seive[i]){
primeNumbers.push_back(i);
}
}
}
bool primeFactors(int number){
int divisor = 0;
while(number > 1){
int pow = 0;
while(number % primeNumbers[divisor] == 0){
number /= primeNumbers[divisor];
pow++;
}
if(pow){
return false;
}
divisor++;
if(primeNumbers[divisor] * primeNumbers[divisor] > number){
return true;
}
}
return true;
}
int main(){
int limit, countPrimeNumbers = 0;
cin >> limit;
ciur(limit);
for(int i = 1; i <= limit; i += 2){
if(primeFactors(i)){
countPrimeNumbers++;
}
if(i == 2){
countPrimeNumbers++;
}
}
cout << countPrimeNumbers;
return 0;
}