Pagini recente » Cod sursa (job #2530621) | Cod sursa (job #247425) | Cod sursa (job #859869) | Cod sursa (job #1188763) | Cod sursa (job #2055834)
#include <fstream>
#include <iostream>
using namespace std;
ifstream fin("pascal.in");
ofstream fout("pascal.out");
int d[7],r,nr,divr,valid=1;
void verif(int validare,int putere,int i)
{
int rsec,putere1,putere2,putfin,p;
rsec=r-i;
putere1=putere2=0;
p=nr;
while(p<=rsec)
{
putere1+=(rsec/p);
p*=nr;
}
p=nr;
while(p<=i)
{
putere2+=(i/p);
p*=nr;
}
putfin=putere-putere1-putere2;
if(putfin>=validare)
{
if(i==r/2)
{
if(r%2==0)divr+=1;
else divr+=2;
}
else divr+=2;
}
}
int main()
{
d[4]=d[6]=1;
fin>>r>>nr;
if(nr!=6)
{
int p,putere=0;
if(nr==4)
{
nr=2;
valid=2;
}
p=nr;
while(p<=r)
{
putere+=(r/p);
p*=nr;
}
for(int i=1; i<=r/2; i++)
{
verif(valid,putere,i);
}
}
else
{
int p2=2,p3=3,putere2=0,putere3=0;
int rsec,aux,putfin2,putfin3;
while(p2<=r)
{
putere2+=(r/p2);
p2*=2;
}
while(p3<=r)
{
putere3+=(r/p3);
p3*=2;
}
for(int i=1; i<=r/2; i++)
{
rsec=r-i;
aux=0;
p2=2;
while(p2<=rsec)
{
aux+=(rsec/p2);
p2*=2;
}
aux=0;
putfin2=putere2-aux;
while(p2<=i)
{
aux+=(i/p2);
p2*=2;
}
putfin2-=aux;
p3=3;
aux=0;
while(p3<=rsec)
{
aux+=(rsec/p3);
p3*=3;
}
putfin3=putere3-aux;
aux=0;
while(p3<=i)
{
aux+=(i/p3);
p3*=3;
}
putfin3-=aux;
if(putfin2>=1 && putfin3>=1)
{
if(i==r/2)
{
if(r%2==0)divr+=1;
else divr+=2;
}
else divr+=2;
}
}
}
fout<<divr;
return 0;
}