Cod sursa(job #3124620)

Utilizator andiRTanasescu Andrei-Rares andiR Data 29 aprilie 2023 15:27:37
Problema Pascal Scor 10
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.18 kb
#include <iostream>
#include <fstream>

using namespace std;
ifstream fin ("pascal.in");
ofstream fout ("pascal.out");
const int Nmax=5000000;

int r, d;
long long f1[Nmax+1], f2[Nmax+1];
int main()
{
    cin>>r>>d;
    f1[0]=f1[1]=f2[0]=f2[1]=0;
    for (int i=2; i<=r; i++){
        int aux=i;
        if (d==2 || d==3 || d==5)
            while (aux%d==0){
                aux/=d;
                f1[i]++;
            }
        else if (d==4)
            while (aux%2==0){
                aux/=2;
                f1[i]++;
            }
        else{
            while (aux%2==0){
                aux/=2;
                f1[i]++;
            }
            aux=i;
            while (aux%3==0){
                aux/=3;
                f2[i]++;
            }
        }
        f1[i]+=f1[i-1];
        f2[i]+=f2[i-1];
    }
    int cnt=0;
    for (int i=0; i<=r; i++){
        if (((d==2) || (d==3) || (d==5)) && (f1[r]-f1[i]-f1[r-i]>0))
            cnt++;
        else if ((d==4) && (f1[r]-f1[i]-f1[r-i]>1))
            cnt++;
        else if ((d==6) && (f1[r]-f1[i]-f1[r-i]>0) && (f2[r]-f2[i]-f2[r-i]>0))
            cnt++;
    }
    cout<<cnt;
    return 0;
}