Cod sursa(job #2091418)

Utilizator TudoseSanzianaTudose Sanziana TudoseSanziana Data 19 decembrie 2017 18:05:00
Problema Pascal Scor 40
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.17 kb
#include <bits/stdc++.h>
using namespace std;

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

const int RMAX = 5e6, INF = 2e9;

int n, d, ans;
int fact[RMAX + 2], aux[RMAX + 2];

int prime[] = {2, 3, 5};

int main()
{
    for(int i = 1; i <= RMAX; i++)
        fact[i] = INF;

    in >> n >> d;

    int tmp, p;
    for(int j = 0; j < 3; j++)
        if(d % prime[j] == 0)
        {
            for(int div = prime[j]; div <= n; div *= prime[j])
            for(int i = div; i <= n; i += div)
                aux[i]++;

            p = 0; tmp = d;
            while(tmp % prime[j] == 0)
            {
                p++;
                tmp /= prime[j];
            }

            for(int i = 1; i <= n; i++)
            {
                fact[i] = min(fact[i], aux[i] / p);
                aux[i] = 0;
            }
        }

    for(int i = 1; i <= n; i++)
        fact[i] += fact[i - 1];

    int numarator, numitor;
    for(int i = 1; i < n; i++)
    {
        numarator = fact[n];
        numitor = fact[n - i] + fact[i];

        if(numarator - numitor > 0)
            ans++;
    }

    out << ans << '\n';
    return 0;
}