Cod sursa(job #485489)

Utilizator cont_de_testeCont Teste cont_de_teste Data 18 septembrie 2010 15:48:50
Problema Zero 2 Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.82 kb
#include <stdio.h>

#define FIN "zero2.in"
#define FOUT "zero2.out"
#define ll long long
#define min(a, b) ((a) < (b) ? (a) : (b))

int N, B;

ll solve(ll N, ll p)
{
    ll t, k, ret = 0;

    for (t = p; t <= N; t *= p)
    {
        k = N/t;
        ret += (ll)t*k*(k-1)/2 + (ll)(N-k*t+1)*k;
    }
    return ret;
}

int main(void)
{
    ll t, p, e, ret;

    freopen(FIN, "r", stdin);
    freopen(FOUT, "w", stdout);

    for (t = 0; t < 10; t++)
    {
        scanf("%d %d", &N, &B);

        ret = 1LL << 61;
        for (p = 2; p*p <= B; p++)
        {
            if (B%p) continue;
            for (e = 0; !(B%p); B /= p) e++;
            ret = min(ret, solve(N, p)/e);
        }
        if (B > 1) ret = min(ret, solve(N, B));

        printf("%lld\n", ret);
    }

    return 0;
}