Pagini recente » Diferente pentru teorema-chineza-a-resturilor intre reviziile 84 si 83 | Cod sursa (job #671256) | Cod sursa (job #2487044) | Rating BuzuliucAlexandru (Alexandru13B) | Cod sursa (job #485843)
Cod sursa(job #485843)
#include<fstream>
using namespace std;
struct rec
{
int p2,p3;
} a[5000002];
int r,d;
int p2d,p3d,nr;
ifstream f("pascal.in");
ofstream g("pascal.out");
void factr();
void factd();
void num();
int main()
{
f>>r>>d;
factr();
factd();
num();
g<<nr;
f.close();
g.close();
}
void num()
{
int pp2,pp3,mij=r/2,k;
for (k=1;k<=mij;++k)
{
pp2=a[k].p2+a[r-k].p2;
pp3=a[k].p3+a[r-k].p3;
if (pp2>=p2d&&pp3>=p3d) ++nr;
}
nr*=2;
if (r%2==0) nr--;
}
void factd()
{
while (d%2==0)
{
++p2d;
d/=2;
}
while (d%3==0)
{
++p3d;
d/=3;
}
}
void factr()
{
int i,x;
for (i=2;i<=r;++i)
{
a[i].p2=a[i-1].p2;
a[i].p3=a[i-1].p3;
x=i;
while (x%2==0)
{
++a[i].p2;
x/=2;
}
while (x%3==0)
{
++a[i].p3;
x/=3;
}
}
}