Cod sursa(job #1470786)

Utilizator acomAndrei Comaneci acom Data 12 august 2015 12:19:32
Problema Pascal Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.95 kb
#include<fstream>
using namespace std;
ifstream fin("pascal.in");
ofstream fout("pascal.out");
long long r,d,p,sol,P[7];
inline long long num(long long N, long long D)
{
    long long nr=0;
    for (long long i=D;i<=N;i*=D)
        nr+=N/i;
    return nr;
}
bool num(long long N, long long M, long long D)
{
    if (D==2 || D==3 || D==5)
        return P[D]>num(N,D)+num(M,D);
    if (D==4)
        return P[2]>1+num(N,2)+num(M,2);
    return (P[2]>num(N,2)+num(M,2) && P[3]>num(N,3)+num(M,3));
}
int main()
{
    long long i;
    fin>>r>>d;
    P[2]=num(r,2), P[3]=num(r,3), P[5]=num(r,5);
    if (r&1)
    {
        for (i=1;i<=(r>>1);++i)
            if (num(i,r-i,d))
                ++sol;
        sol<<=1;
    }
    else
    {
        for (i=1;i<(r>>1);++i)
            if (num(i,r-i,d))
                ++sol;
        sol<<=1;
        if(num(r>>1,r>>1,d))
            ++sol;
    }
    fout<<sol<<"\n";
    return 0;
}