I'm working on modernizing Rosetta Code's infrastructure. Starting with communications. Please accept this time-limited open invite to RC's Slack.. --Michael Mol (talk) 20:59, 30 May 2020 (UTC)

## First perfect square in base N with N unique digits

The most time consuming ist evaluating the used digits.

```static bool allInQS(BigInteger b) {
BigInteger re; int c = ic; hs.Clear(); hs.UnionWith(o); while (b > bllim) {
b = BigInteger.DivRem(b, Base, out re);
hs.Add((byte)re); c += 1; if (c > hs.Count) return false;
} return true;
}```

I think, using a combination of biginteger and machine size integers can improve this. First calculate the power of base, that fits into a machine integer and than use this maximised base for Bigint calculationes.

```  b = BigInteger.DivRem(b, BaseToPower, out re);
for(i = 1; i<power, i++)
// extract the count= power digits```

If you need more speed, create for every base a seperat function. The compiler will use mul and shift instead of div, if the divisor is a constant.

```// think of UInt64 as machine size of integer.
static bool allInQSBase28(BigInteger b) {
BigInteger re; int c = ic; hs.Clear(); hs.UnionWith(o); while (b > bllim) {
b = BigInteger.DivRem(b, (28**13)6502111422497947648‬, out re);
for(i = 1; i<13, i++){
div = re \ 28;
mod = re - div*28;