Cod sursa(job #1319854)

Utilizator laurageorgescuLaura Georgescu laurageorgescu Data 17 ianuarie 2015 14:05:35
Problema Pascal Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.24 kb
#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, 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 ];
        }
    }
    if ( d2 != 0 ) {
        for( int p = d2; p <= r; p *= d2 ) {
            for( int i = p; i <= r; i += p ) {
                ++ f2[ i ];
            }
        }
    }
}
void solve( int i ) {
    int lim, x = f1[ r ] - f1[ i ] - f1[ r - i ];
    lim = 0;
    if ( d == 6 ) {
        int y = f2[ r ] - f2[ i ] - f2[ r - i ];
        x = x < y ? x : y;
    }
    if ( d == 4 ) {
        lim = 1;
    }
    if ( x > lim ) {
        ++ ans;
    }
}
int main() {
    fscanf( fin, "%d%d", &r, &d1 );
    d = d1;
    if ( d1 == 6 ) {
        d1 = 2;
        d2 = 3;
    } else if ( d1 == 4 ) {
        d1 = 2;
    }
    precalc();
    ans = 0;
    for( int i = 0; i <= r / 2; ++ i ) {
        solve( i );
    }
    ans *= 2;
    if ( (r & 1) == 0 ) {
        solve( r / 2 + 1 );
    }
    fprintf( fout, "%d\n", ans );
    fclose( fin );
    fclose( fout );
    return 0;
}