Pagini recente » Cod sursa (job #1428974) | Cod sursa (job #2944949) | Cod sursa (job #1550968) | Cod sursa (job #2504491) | Cod sursa (job #1844674)
#include <cstdio>
#include <iostream>
using namespace std;
int v[5000001],div[2],w[5000001];
int main()
{
FILE *fin=fopen ("pascal.in","r");
FILE *fout=fopen ("pascal.out","w");
int r,d,sol,i,nr,ok,doi,trei;
fscanf (fin,"%d%d",&r,&d);
sol=0;
if (d==2 || d==3 || d==5){
sol=0;
for (i=1;i<=r;i++){
nr=i;
while (nr%d==0){
v[i]++;
nr/=d;
}
v[i]+=v[i-1];
}
}
else if (d==4){
div[0]=2;
ok=0;
for (i=1;i<=r;i++){
nr=i;
while (nr%2==0){
v[i]++;
nr/=2;
}
if (v[i]%2==1){
if (ok==1){
ok=0;
v[i]++;
}
else ok=1;
}
v[i]/=2;
v[i]+=v[i-1];
}
}
else {
doi=0;
trei=0;
for (i=1;i<=r;i++){
nr=i;
while (nr%2==0){
doi++;
nr/=2;
}
while (nr%3==0){
trei++;
nr/=3;
}
}
v[i]=min(doi,trei);
if (doi<trei){
trei-=doi;
doi=0;
}
else {
doi-=trei;
trei=0;
}
v[i]+=v[i-1];
}
for (i=0;i<r;i++){
if (v[r]-v[r-i]-v[i]>0)
sol++;
}
fprintf (fout,"%d",sol);
return 0;
}