Mai intai trebuie sa te autentifici.
Cod sursa(job #2498869)
Utilizator | Data | 24 noiembrie 2019 17:30:27 | |
---|---|---|---|
Problema | Pascal | Scor | 50 |
Compilator | cpp-64 | Status | done |
Runda | Arhiva de probleme | Marime | 1.45 kb |
#include <fstream>
#include <vector>
using namespace std;
ifstream fin("pascal.in");
ofstream fout("pascal.out");
int n, d, m, t, i, j, aux, k, div2[5000010], div3[5000010], div5[5000010], sol;
int main(){
fin>>n>>d;
if(d==1){
fout<<n+1;
return 0;
}
/// precalculez puterea divizorilor de 2, 3, 5 lui " i! " deoarece d <= 6
for(i=1; i<=n; i++){
div2[i]=div2[i-1];
aux=i;
while(aux%2==0){
div2[i]++;
aux/=2;
}
div3[i]=div3[i-1];
aux=i;
while(aux%3==0){
div3[i]++;
aux/=3;
}
div5[i]=div5[i/5];
aux=i;
while(aux%5==0){
div5[i]++;
aux/=5;
}
}
i=n;
for(j=0; j<=n; j++){
/// i!/((i-j)!*j!)
if(d==2){
if(div2[i]-div2[i-j]-div2[j]>0){
sol++;
}
}
if(d==3){
if(div3[i]-div3[i-j]-div3[j]>0){
sol++;
}
}
if(d==5){
if(div5[i]-div5[i-j]-div5[j]>0){
sol++;
}
}
if(d==4){
if(div2[i]/2-div2[i-j]/2-div2[j]/2>0){
sol++;
}
}
if(d==6){
if(div2[i]-div2[i-j]-div2[j]>0 && div3[i]-div3[i-j]-div3[j]>0){
sol++;
}
}
}
fout<<sol;
}