Cod sursa(job #961767)

Utilizator Dddarius95Darius-Florentin Neatu Dddarius95 Data 12 iunie 2013 20:22:10
Problema Pascal Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.1 kb
#include <fstream>
#include <algorithm>

using namespace std;

ifstream f("pascal.in");
ofstream g("pascal.out");

long R,D;

int ExtrageExponent(long n,int D)
{
    if(D==4)return ExtrageExponent(n,2)/2;
    else
    if(D==6)
    {
        int doi=ExtrageExponent(n,2);
        if(doi==0)return 0;
        else
        {
            int trei=ExtrageExponent(n,3);
            return min(doi,trei);
        }
    }
    else
    {
        int Exp=0;
        long x=D;
        while((n>=x)!=0)
        {
            Exp+=(n/x);
            x*=D;
        }
        return Exp;
    }

}

bool Valid(int n,int k)
{
    int PutereD=ExtrageExponent(n,D)-ExtrageExponent(n-k,D)-ExtrageExponent(k,D);
    if(PutereD>0)return true;
    return false;
}

long Numara(int R,int D)
{
    long nr=0,mijloc=R/2;
    if(R % 2==0)
    {
        mijloc--;
        if(Valid(R,R/2)==true)nr++;
    }

    for(int j=1;j<=mijloc;j++)
        if(Valid(R,j)==true)nr+=2;
    return nr;

}
int main ()
{

    f>>R>>D;
    g<<Numara(R,D)<<'\n';
    f.close();g.close();
    return 0;
}