Pagini recente » Cod sursa (job #1634498) | Cod sursa (job #1715846) | Cod sursa (job #176347) | Cod sursa (job #1747849) | Cod sursa (job #1661699)
#include <fstream>
using namespace std;
ifstream fin("pascal.in");
ofstream fout("pascal.out");
int n,p,i,x,total;
struct el
{
int a,b;
}c0,c1,c2;
void imparte(int x,int p)
{
switch (p)
{
case 6:
{
while(x%2==0)
{
c1.a++;
x/=2;
}
while(x%3==0)
{
c1.b++;
x/=3;
}
break;
}
case 4:
{
while(x%2==0)
{
c1.a++;
x/=2;
}
break;
}
default:
{
while(x%p==0)
{
c1.a++;
x/=p;
}
break;
}
}
}
int main()
{
fin>>n>>p;
for(i=1;i<(n+1)/2;i++)
{
x=n-i+1;
c1.a=0;
c1.b=0;
imparte(x,p);
c0.a+=c1.a;
c0.b+=c1.b;
c1.a=0;
c1.b=0;
imparte(i,p);
c2.a+=c1.a;
c2.b+=c2.b;
if(p==6)
{
if(c0.a-c2.a>0&&c0.b-c2.b>0)
total+=2;
}
else
if(p==4)
{
if((c0.a-c2.a)/2>0)
total+=2;
}
else
if(c0.a-c2.a>0)
total+=2;
}
if(n%2==0)
{
x=n-i+1;
c1.a=0;
c1.b=0;
imparte(x,p);
c0.a+=c1.a;
c0.b+=c1.b;
c1.a=0;
c1.b=0;
imparte(i,p);
c2.a+=c1.a;
c2.b+=c2.b;
if(p==6)
{
if(c0.a-c2.a>0&&c0.b-c2.b>0)
total++;
}
else
if(p==4)
{
if((c0.a-c2.a)/2>0)
total++;
}
else
if(c0.a-c2.a>0)
total++;
}
fout<<total;
return 0;
}