Pagini recente » Monitorul de evaluare | Monitorul de evaluare | Istoria paginii utilizator/mihaela.coneac | Atasamentele paginii simulare_oji_2023_clasa_9_13_martie | Cod sursa (job #2007331)
#include <iostream>
#include <fstream>
#include <iomanip>
#define base 1000000
using namespace std;
ifstream f("patrate2.in");
ofstream g("patrate2.out");
long long n[2005],sol[2005],p,fct,c[2005];
void golire()
{
for(int i=1;i<=c[0];++i) c[i]=0;
}
void INMULTIRE(long long a[],long long b[])
{
golire();
for(int i=1;i<=a[0];++i)
{
for(int j=1;j<=b[0];++j)
{
c[j+i-1]+=(a[i]*b[j]);
}
}
int i=1;
while(c[i])
{
c[i+1]+=c[i]/base;
c[i]%=base;
++i;
}
c[0]=i-1;
for(i=0;i<=c[0];++i)
{
a[i]=c[i];
}
}
void put(long long p)
{
sol[0]=sol[1]=1;
while(p)
{
if(p%2) INMULTIRE(sol,n);
p/=2;
INMULTIRE(n,n);
}
}
void SCALAR(long long sol[],long long nr)
{
for(int i=1;i<=sol[0]+1;++i)
{
sol[i]=sol[i]*nr+sol[i-1]/base;
sol[i-1]%=base;
}
if(sol[sol[0]+1]) ++sol[0];
}
int main()
{
f>>fct;
p=fct*fct; n[1]=2; n[0]=1;
put(p);
for(int j=1;j<=fct;++j)
{
SCALAR(sol,j);
}
g<<sol[sol[0]];
--sol[0];
for(int j=sol[0];j>=1;--j)
{
g<<setw(6)<<setfill('0')<<sol[j];
}
return 0;
}