Cod sursa(job #1069692)

Utilizator alex_HarryBabalau Alexandru alex_Harry Data 30 decembrie 2013 13:47:14
Problema Zero 2 Scor 63
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.12 kb
#include <fstream>
#include <cmath>
using namespace std;
ifstream f("zero2.in");
ofstream g("zero2.out");
int N,B;
long long Result;
long long Answer=10000000000000;
int Prime[35000],Exp[35000],ind;
void Descomp()
{
    int i=2;
    int limit=(int)sqrt((double)B);
    while(B>1 && i<=limit)
    {
        if(B%i==0)
        {
            Prime[++ind]=i;
            Exp[ind]=0;
        }
        while(B%i==0)
            B/=i,Exp[ind]++;
        ++i;
    }
    if(B!=1)
    {
        Prime[++ind]=B;
        Exp[ind]=1;
    }
}
void Solve(int k)
{
    int aux=N/k;
    Result+=(aux)*(aux-1)/2*k;
    Result+=aux*(N%k+1);
}
void Browse()
{
    int i;
    for(i=1;i<=ind;i++)
    {
        Result=0;
        int fact=Prime[i];
        while(fact<=N)
        {
            Solve(fact);
            fact*=Prime[i];
        }
        Answer=min(Answer,Result/Exp[i]);
    }
    g<<Answer<<"\n";
}
int main()
{
    int T=10;
    while(T--)
    {
        f>>N>>B;
        ind=0;
        Answer=10000000000000;
        Result=0;
        Descomp();
        Browse();
    }
    return 0;
}