Pagini recente » Cod sursa (job #2678144) | Cod sursa (job #2622596) | Cod sursa (job #3211647) | Cod sursa (job #21200) | Cod sursa (job #1319865)
#include<cstdio>
using namespace std;
FILE *fin = fopen( "pascal.in", "r" ), *fout = fopen( "pascal.out", "w" );
const int nmax = 5000000;
int d1, d2, d, r, ans, lim, f1[ nmax + 1 ], f2[ nmax + 1 ];
void precalc() {
for( int p = d1; p <= r; p *=d1 ) {
for( int i = p; i <= r; i += p ) {
++ f1[ i ];
}
}
for( int i = d1; i <= r; ++ i ) {
f1[ i ] += f1[ i - 1 ];
}
if ( d2 != 0 ) {
for( int p = d2; p <= r; p *= d2 ) {
for( int i = p; i <= r; i += p ) {
++ f2[ i ];
}
}
for( int i = d2; i <= r; ++ i ) {
f2[ i ] += f2[ i - 1 ];
}
}
}
void solve( int i ) {
int x = f1[ r ] - f1[ i ] - f1[ r - i ];
if ( d == 6 ) {
int y = f2[ r ] - f2[ i ] - f2[ r - i ];
x = x < y ? x : y;
}
if ( x > lim ) {
++ ans;
}
}
int main() {
fscanf( fin, "%d%d", &r, &d1 );
d = d1;
lim = 0;
if ( d1 == 6 ) {
d1 = 2;
d2 = 3;
} else if ( d1 == 4 ) {
d1 = 2;
lim = 1;
}
precalc();
ans = 0;
for( int i = 0; i < (r + 1) / 2; ++ i ) {
solve( i );
}
ans *= 2;
if ( (r & 1) == 0 ) {
solve( r / 2 );
}
fprintf( fout, "%d\n", ans );
fclose( fin );
fclose( fout );
return 0;
}