Pagini recente » Cod sursa (job #2496750) | Cod sursa (job #1331806) | Cod sursa (job #1296167) | Cod sursa (job #2350969) | Cod sursa (job #1065061)
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("ratphu.in");
ofstream g("ratphu.out");
int p,b,cif[20];
long long n,dp[1<<18][20];
int main()
{ int i,r=0,k=0;
f>>n>>p;
while(n)
{k++; cif[k]=n%10; n/=10;}
dp[0][0]=1;
/// dp[i][j] = nr. posibilitatilor de a forma permutari
/// (cu submultimea i a cifrelor lui n) care sa dea restul j la impartirea cu p
for(i=1;i<=k;i++)
dp[1<<(i-1)][cif[i]%p]++;
for(i=1;i<(1<<k);i++)
for(r=0;r<p;r++)
if (dp[i][r])
for(b=0;b<k;b++)
if ((i&(1<<b))==0)
dp[i|(1<<b)][(r*10+cif[b+1])%p]+=dp[i][r];
g<<dp[(1<<k)-1][0]<<"\n";
return 0;
}