33,027
社区成员




#include <stdio.h>
#include <memory.h>
const int need[10] = {6, 2, 5, 5, 4, 5, 6, 3, 7, 6},mod = 1000000007,range = 10005;
bool isnp[range];
int dp[1010005];
inline void add(int &a,int b)
{
a+=b;
if (a>=mod) a-=mod;
}
int main()
{
int t, n, m, i, j, k, res;
isnp[0]=isnp[1]=true;
for (i=2; i<range; i++)
if (!isnp[i])
for (j=2*i;j<range;j+=i)
isnp[j]=true;
for(scanf("%d",&t); t; --t)
{
scanf("%d %d", &n, &m);
memset(dp, 0, sizeof(dp));
for (i = 1; i < 10; i++) //因为前导0不算dp[6][0]=0
dp[need[i] * m + (i % m)]++;
for (i = 0; i < n; i++)
for (j = 0; j < 10; j++) if (i + need[j] <= n)
for (k = 0; k < m; k++)
add(dp[(i + need[j]) * m + (k * 10 + j) % m],dp[i * m + k]);
for (i=res=0; i < m; i++) if (!isnp[i])
add(res,dp[n * m + i]);
printf("%d\n", res);
}
return 0;
}