Pagini recente » Cod sursa (job #2640021) | Rating Berescu Silvia-Maria (silviamaria) | Cod sursa (job #2967662) | Cod sursa (job #1976646) | Cod sursa (job #1701449)
#include <fstream>
#include <iostream>
#include <vector>
using namespace std;
int pow(long a, int n, int mod){
int ans = 1;
for (; n; n >>= 1, a = a * a % mod)
if ( n & 1 ) ans = ans * a % mod;
return ans;
}
bool pass(long x, int nr, int mod){
if ( x == mod ) return true;
x = pow(x, mod >> nr, mod);
if ( x == 1 ) return true;
while (nr--){
if ( x == mod - 1 )
return true;
x = x * x % mod;
}
return false;
}
bool prime(int n){
int s = __builtin_ctz(n - 1);
return s && pass(31, s, n) && pass(73, s, n);
}
int main(){
ifstream in("ciur.in");
ofstream out("ciur.out");
int n, ans = 1;
in >> n;
for (int i = 3; i <= n; i += 2)
ans += prime(i);
out << ans << '\n';
return 0;
}