Pagini recente » Cod sursa (job #105554) | Cod sursa (job #2255079) | Cod sursa (job #848396) | Cod sursa (job #1145912) | Cod sursa (job #2777984)
#include <iostream>
#include <fstream>
using namespace std;
using ll = long long;
const int P1 = 2;
const int P2 = 3;
const int P3 = 5;
const int NMAX = 5e6;
int p[1 + NMAX], pp[1 + NMAX];
ifstream fin ( "pascal.in" );
ofstream fout ( "pascal.out" );
void legendre ( ll prime, int v[] ) {
for ( ll pwr = prime; pwr <= NMAX; pwr *= prime ) {
for ( ll x = pwr; x <= NMAX; x += pwr )
v[x] ++;
}
for ( int i = 1; i <= NMAX; i ++ )
v[i] += v[i - 1];
}
int main()
{
int n, div; fin >> n >> div;
int result;
if ( div == P1 ) {
legendre ( P1, p );
result = 0;
for ( int i = 0; i < n; i ++ )
if ( p[n] - p[n - i - 1] - p[i + 1] >= 1 )
result ++;
}
else if ( div == P1 * P1 ) {
legendre ( P1, p );
result = 0;
for ( int i = 0; i < n; i ++ )
if ( p[n] - p[n - i - 1] - p[i + 1] >= 2 )
result ++;
}
else if ( div == P2 ) {
legendre ( P2, p );
result = 0;
for ( int i = 0; i < n; i ++ )
if ( p[n] - p[n - i - 1] - p[i + 1] >= 1 )
result ++;
}
else if ( div == P3 ) {
legendre ( P3, p );
result = 0;
for ( int i = 0; i < n; i ++ )
if ( p[n] - p[n - i - 1] - p[i + 1] >= 1 )
result ++;
}
else {
legendre ( P1, p ); legendre ( P2, pp );
result = 0;
for ( int i = 0; i < n; i ++ )
if ( p[n] - p[n - i - 1] - p[i + 1] >= 1 && pp[n] - pp[n - i - 1] - pp[i + 1] >= 1 )
result ++;
}
fout << result;
return 0;
}