Вот вам слепленный на скорую руку вариант на Javascript
a = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0];
for (d1 = 1; d1 <= 9; d1++) {
a[d1]++;
for (d2 = 0; d2 <= 9; d2++) {
a[d2]++;
for (d3 = d1; d3 <=9; d3++) {
a[d3]++;
for (d4 = (0 == d2 ? 1 : (d1 == d3 ? d2 : 0)); d4 <= 9; d4++) {
a[d4]++;
val1 = d1*10+d2;
val2 = d3*10+d4;
val = val1*val2;
b = [a[0], a[1], a[2], a[3], a[4], a[5], a[6], a[7], a[8], a[9]];
b[val%10]--;
b[Math.floor(val/10)%10]--;
b[Math.floor(val/100)%10]--;
b[Math.floor(val/1000)]--;
diff = 0;
for (i = 0; i < 9; i++)
diff |= b[i];
if (0 == diff)
console.log(val1, val2, val);
a[d4]--;
}
a[d3]--;
}
a[d2]--;
}
a[d1]--;
}