Pagini recente » Cod sursa (job #3233241) | Cod sursa (job #905002) | Cod sursa (job #1901473) | Cod sursa (job #815697) | Cod sursa (job #761977)
Cod sursa(job #761977)
#include<fstream>
using namespace std;
int n,D,sol;
void Rezolvare1()
{
int i,x,p,put,lim=n/2;
//pentru n!
x=n;
put=0;
while(x>=D)
{
put+=(x/D);
x/=D;
}
for(i=1;i<=lim;i++)
{
p=put;
//pentru i!
x=i;
while(x>=D)
{
p-=(x/D);
x/=D;
}
//pentru (n-i)!
x=n-i;
while(x>=D)
{
p-=(x/D);
x/=D;
}
//trebuie ca D sa apara la o putere > 0
if(p>0)
{
sol+=2;
if(2*i==n)
sol--;
}
}
}
void Rezolvare2()
{
int i,x,p,put,lim=n/2;
//pentru n!
x=n;
put=0;
while(x>=2)
{
put+=(x/2);
x/=2;
}
for(i=1;i<=lim;i++)
{
p=put;
//pentru i!
x=i;
while(x>=2)
{
p-=(x/2);
x/=2;
}
//pentru (n-i)!
x=n-i;
while(x>=2)
{
p-=(x/2);
x/=2;
}
//trebuie ca sa 2 sa apara la o putere > 1
if(p>1)
{
sol+=2;
if(2*i==n)
sol--;
}
}
}
void Rezolvare3()
{
int i,x,p2,p3,put2,put3,lim=n/2;
//pentru n! cu D=2
x=n;
put2=0;
while(x>=2)
{
put2+=(x/2);
x/=2;
}
//pentru n! cu D=3
x=n;
put3=0;
while(x>=3)
{
put3+=(x/3);
x/=3;
}
for(i=1;i<=lim;i++)
{
p2=put2;
//pentru i! cu D=2
x=i;
while(x>=2)
{
p2-=(x/2);
x/=2;
}
//pentru (n-i)! cu D=2
x=n-i;
while(x>=2)
{
p2-=(x/2);
x/=2;
}
p3=put3;
//pentru i! cu D=3
x=i;
while(x>=3)
{
p3-=(x/3);
x/=3;
}
//pentru (n-i)! cu D=3
x=n-i;
while(x>=3)
{
p3-=(x/3);
x/=3;
}
//trebuie ca sa 2 si 3 sa apara la o putere > 0
if(p2>0 && p3>0)
{
sol+=2;
if(2*i==n)
sol--;
}
}
}
int main()
{
ifstream fin("pascal.in");
fin>>n>>D;
fin.close();
if(D==2 || D==3 || D==5)
Rezolvare1();
if(D==4)
Rezolvare2();
if(D==6)
Rezolvare3();
ofstream fout("pascal.out");
fout<<sol<<"\n";
fout.close();
return 0;
}