这道题看着别人的代码写的。
#include <cstdio>
#include <cstring>
#define m 1000000009
using namespace std; bool prime[][][];
int dp[][][];
int temp=; void getprime()
{
memset(dp,,sizeodp(dp));
bool p[];
memset(p,false,sizeof(p));
for(int i=; i<; i++)
{
if(!p[i])
{
for(int j=i+i; j<; j+=i)
{
p[j]=true;
}
}
}
for(int i=; i<; i++)
{
if(!p[i])
{
int x1=i/;
int x2=(i/)%;
int x3=i%;
prime[x1][x2][x3]=true;
dp[][x2][x3]+=;
temp++;
}
}
}
int main()
{
int n;
scanf("%d",&n);
getprime();
if(n==)
{
printf("%d\n",temp);
return ;
}
for(int i=; i<=n; i++)
{
for(int x1=; x1<; x1++)
{
for(int x2=; x2<; x2++)
{
for(int x3=; x3<; x3++)
{
if(dp[i-][x1][x2]>&&(prime[x1][x2][x3]))
{
dp[i][x2][x3]=(dp[i][x2][x3]+dp[i-][x1][x2])%m;
}
}
}
}
}
int ans=;
for(int x2=; x2<; x2++)
{
for(int x3=; x3<; x3++)
{
ans=(ans+dp[n][x2][x3])%m;
}
}
printf("%d\n",ans);
return ;
}