题目链接:http://acm.sgu.ru/problem.php?contest=0&problem=159
题意:一个数P的平方Q,若Q的后若干位是P,则成P为自复制数。给定B,n。求出所有n位的B进制自复制数。
思路:n位的自复制数P,则P删掉最高位得到的n-1位也是自复制数。
const int MAX=2005;
int a[MAX][MAX],aNum;
int B,n;
int b[MAX];
void DFS(int dep,int r)
{
int i,j,temp;
if(dep==n)
{
if(b[dep-1]||n==1)
{
FOR0(i,n) a[aNum][n-1-i]=b[i];
aNum++;
}
return;
}
FOR0(i,B)
{
b[dep]=i;
temp=0;
FOR0(j,dep+1) temp+=b[j]*b[dep-j];
if((temp+r)%B==i) DFS(dep+1,(temp+r)/B);
}
}
int main()
{
RD(B,n);
DFS(0,0);
PR(aNum);
int i,j;
FOR0(i,aNum)
{
FOR0(j,n)
{
if(a[i][j]<=9) printf("%d",a[i][j]);
else putchar(a[i][j]+55);
}
puts("");
}
return 0;
}