\\ describe a fraction:
\\  - integer part
\\  - transient part
\\  - periodic part
fracdigits(v, base) = {
	\\ integer part
	my (int=digits(floor(v), base));

	\\ period length
	my (den=denominator(v), pr=factor(base)[,1]~, p=znorder(Mod(base, den / prod(i=1, #pr, pr[i]^valuation(den,pr[i])))));

	\\ transient part
	my (tra=[], fra=frac(v));
	while (fra != frac(fra*base^p),
		tra = concat(tra, floor(fra*base));
		fra = frac(fra*base);
	);

	\\ periodic part
	my (per = vector(p, x, my (d=floor(fra*base)); fra = frac(fra*base); d));

	return ([int,tra,per]);
}

is(n, base=10) = #Set(select(sign, concat(fracdigits(1/n, base))))==1

for (n=1, oo, if (is(n), print (k++ " " n); if (k==1000, break)))

quit