int ispandigital(int m2) { for (int m0 = 1; m0 < ceil(sqrt(m2)); ++m0) { int m1; if (m2 % m0 != 0) continue; m1 = m2 / m0; if (ndigits(m0) + ndigits(m1) + ndigits(m2) != 9) continue; if (sdigits(sdigits(sdigits(0, m0), m1), m2) == SD_ALL) { /* printf("bing! %d * %d = %d\n", m0, m1, m2); */ return 1; } } return 0; }
int ispandigital(int n) { int d = ndigits(n); unsigned int sd = sdigits(0, n); for (int i = 1; i <= d; ++i) if (!(sd & (1 << i))) return 0; return 1; }