Pagini recente » Cod sursa (job #2073781) | Cod sursa (job #2132841) | Cod sursa (job #3270367) | Cod sursa (job #2117679) | Cod sursa (job #1264060)
#include <cstdio>
#include <cstring>
#include <vector>
using namespace std;
char sir[25];
int p,a[25],n;
vector <int> biti[(1<<18)+5];
long long dp[(1<<18)+5][25];
inline void Precalcul()
{
int i,j;
for(i=0;i<(1<<n);++i)
for(j=0;j<n;++j)
if(((1<<j)&i)==0)
biti[i].push_back(j);
}
int main()
{
int i,stare,j;
vector <int>::iterator it;
freopen ("ratphu.in","r",stdin);
freopen ("ratphu.out","w",stdout);
scanf("%s %d", sir,&p);
n=strlen(sir);
Precalcul();
for(i=0;i<n;++i) a[i]=sir[i]-'0';
dp[0][0]=1;
for(stare=0;stare<(1<<n)-1;++stare)
for(j=0;j<p;++j)
for(it=biti[stare].begin();it!=biti[stare].end();++it)
dp[stare|(1<<*it)][(j*10+a[*it])%p]+=dp[stare][j];
printf("%lld\n", dp[(1<<n)-1][0]);
return 0;
}