Cod sursa(job #1205013)

Utilizator andrei_diaconuAndrei Diaconu andrei_diaconu Data 4 iulie 2014 18:15:47
Problema Pascal Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.19 kb
#include <fstream>
using namespace std;
ifstream f("pascal.in");
ofstream g("pascal.out");
int dPr[7], rowPr[7], i, j, r, d, nrDiv, rowTmp[7];
int main()
{
    f>>r>>d;
    for (i=2; i*i<=d; i++) {
        while (d%i==0) {
            d/=i;
            dPr[i]++;
        }
    }
    if (d!=1)
        dPr[d]++;
    int nr=0;
    for (i=2; i<=5; i++) {
        nr=i;
        while (r >= nr) {
            rowPr[i]+=r/nr;
            nr*=i;
        }
    }
    int add=0;
    for (j=0; j<r/2+1; j++) {
        int tmp=(r-j), nr=0;
        for (i=2; i<=5; i++) {
            nr=i;
            rowTmp[i]=rowPr[i];
            while (tmp >= nr) {
                rowTmp[i]-=tmp/nr;
                nr*=i;
            }
        }
        tmp=j;
        for (i=2; i<=5; i++) {
            nr=i;
            while (tmp >= nr) {
                rowTmp[i]-=tmp/nr;
                nr*=i;
            }
        }
        int ok=1;
        for (i=2; i<=5; i++)
            if (dPr[i] != 0 && dPr[i] > rowTmp[i])
                ok=0;
        if (ok==1)
            nrDiv++;
        if (j==r/2 && ok==1 && r%2==0)
            add=1;
    }
    g<<(nrDiv-add)*2+add;
    return 0;
}