Cod sursa(job #461134)

Utilizator DraStiKDragos Oprica DraStiK Data 5 iunie 2010 18:15:08
Problema Zero 2 Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.91 kb
#include <algorithm>
#include <vector>
using namespace std;

#define INF (1<<31)-1
#define pb push_back
#define mp make_pair
#define sc second
#define fs first

vector <pair <int,int> > d;
int n,b,rez;

void solve ()
{
    int i,x,nr;

    d.clear ();
    for (i=2; i*i<=b; ++i)
        if (b%i==0)
        {
            for (nr=0; b%i==0; b/=i)
                ++nr;
            d.pb (mp (i,nr));
        }
    if (b>1)
        d.pb (mp (b,1));
    rez=INF;
    for (i=0; i<(int)d.size (); ++i)
    {
        nr=0;
        for (x=d[i].fs; n/x; x*=d[i].fs)
            nr+=(n/x-1)*(n/x)/2*x+(n/x)*(n-(n/x)*x+1);
      rez=min (rez,nr/d[i].sc);
    }
    printf ("%d\n",rez);
}

int main ()
{
    freopen ("zero2.in","r",stdin);
    freopen ("zero2.out","w",stdout);
    int i;

    for (i=1; i<=10; ++i)
    {
        scanf ("%d%d",&n,&b);
        solve ();
    }

    return 0;
}