Cod sursa(job #3155385)

Utilizator PsyDuck1914Feraru Rares-Serban PsyDuck1914 Data 8 octombrie 2023 09:50:07
Problema Pascal Scor 30
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.13 kb
#include <bits/stdc++.h>

using namespace std;

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

const int NMAX = 5e6 + 5;
short d[6][NMAX+5];

int trim(int val, int dv){
    int p = 0;
    while(val % dv == 0)
        p ++, val /= dv;
    return p;
}

void precalcul(){
    
    for(int i=2; i<=5; i++)
        for(int j=i; j<=NMAX; j+=i)
            d[i][j] = trim(j, i);
    for(int i=2; i<=5; i++)
        for(int j=1; j<=NMAX; j++)
            d[i][j] += d[i][j-1];
            
}

int fact(int val){
    int p = 1;
    for(int i=1; i<=val; i++)   
        p *= i;
    return p;
}

int main()
{
    precalcul();
    int cnt = 0;
    int r, D;
    f >> r >> D;
    if(D < 6){
        for(int j=0; j<=r; j++){
            if(d[D][r] - d[D][r-j] - d[D][j] > 0)
                cnt ++;
            //cout << r << ' ' << d[D][r] << ' ' << r-j << ' ' << d[D][r-j] << ' ' << j << ' ' << d[D][j] << endl; 
        }
        g << cnt;
    }else if(D == 6){
        for(int j=0; j<=r; j++){
            if(d[2][r] - d[2][r-j] - d[2][j] > 0 and d[3][r] - d[3][r-j] - d[3][j] > 0)
                cnt ++;
        }
        g << cnt;
    }
    return 0;
}