Pagini recente » Cod sursa (job #235376) | Cod sursa (job #135244) | Cod sursa (job #1244405) | Cod sursa (job #2146278) | Cod sursa (job #2337375)
#include <fstream>
using namespace std;
ifstream fin("ratphu.in");
ofstream fout("ratphu.out");
int cifre[20],resturi[1<<18][20],puteri[20];
int nr_cifre(int x)
{
int nr = -1;
puteri[0] = 1;
while(x)
{
cifre[++nr] = x%10;
puteri[nr+1] = puteri[nr]*10;
x/=10;
}
return nr+1;
}
int biti(int n)
{ int num = 0;
do num++; while (n &= n - 1);
return num;
}
int main()
{ int N , P;
fin >> N >> P;
int n = nr_cifre(N);
for(int i = 0 ; i < n ; i ++)
resturi[1<<i][cifre[i]%P] += 1 ;
for(int configuratie = 1 ; configuratie < 1<<n ; configuratie++)
{
int m = biti(configuratie);
for(int i = 0 ; i < P ; i++)
if(resturi[configuratie][i])
for(int j = 0 ; j < n ; j++)
{ int var = (configuratie)&(1<<j);
if(var==0)
resturi[configuratie+(1<<j)][(i+puteri[m]*cifre[j])%P] += resturi[configuratie][i] ;
}
}
fout << resturi[(1<<n)-1][0] << "\n";
return 0;
}