Cod sursa(job #2091514)

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

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

const int RMAX = 5e6;

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

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

int main()
{
    in >> n >> d;

    int tmp;
    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)
                fact[j][i]++;

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

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

    bool ok;
    int numarator, numitor;
    for(int i = 1; i < n; i++)
    {
        ok = true;
        for(int j = 0; j < 3; j++)
            if(p[j])
            {
                numarator = fact[j][n];
                numitor = fact[j][n - i] + fact[j][i];

                if(numarator - numitor < p[j])
                {
                    ok = false;
                    break;
                }
            }

        ans += ok;
    }

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