Pagini recente » Cod sursa (job #1643031) | Cod sursa (job #1086001) | Cod sursa (job #878074) | Cod sursa (job #2853439) | Cod sursa (job #487017)
Cod sursa(job #487017)
#include<iostream>
#include<fstream>
using namespace std;
const int mod=9967;
int v1[1000],v2[1000],v3[1000];
void precalc(int d)
{
for(int i=0;i<=25;i++)
v1[i%d]++;
}
void solve(int n,int d)
{
if(n==1)
{
for(int i=0;i<d;i++)
v2[i]=v1[i];
return;
}
solve(n/2,d);
memset(v3,0,sizeof(v3));
for(int i=0;i<d;i++)
{
for(int j=0;j<d;j++)
{
if(i-j>=0)
v3[i]+=v2[j]*v2[i-j];
else
v3[i]+=v2[j]*v2[i-j+d];
v3[i]%=mod;
}
}
if(n&1)
{
for(int i=0;i<d;i++)
{
v2[i]=v3[i];
v3[i]=0;
}
for(int i=0;i<d;i++)
{
for(int j=0;j<d;j++)
{
if(i-j>=0)
v3[i]+=v2[j]*v1[i-j];
else
v3[i]+=v2[j]*v1[i-j+d];
v3[i]%=mod;
}
}
}
for(int i=0;i<d;i++)
v2[i]=v3[i];
}
int main()
{
ifstream in("cuvinte2.in");
ofstream out("cuvinte2.out");
int n,d;
in>>n>>d;
in.close();
precalc(d);
solve(n,d);
out<<v2[0]<<endl;
out.close();
}