大意
判断在nnn进制下小于400的平方是回文数的个数
思路
不要枚举回文数,我们可以从平方下手,这样节省了大量时间
代码
/*
ID:hzbismy1
LANG:C++
TASK:palsquare
*/
#include<cstdio>
using namespace std;int n,k,a[1001],j,len,b[1001];
inline bool check(){for(register int i=1;(i<<1)<=j;i++) if(a[i]!=a[j-i+1]) return false;return true;}//判断是否回文
signed main()
{
freopen("palsquare.in","r",stdin);
freopen("palsquare.out","w",stdout);
scanf("%d",&n);
for(register int i=1;i<=300;i++)
{
k=i*i;j=len=0;
while(k) a[++j]=k%n,k/=n;
if(!check()) continue;
k=i;
while(k) b[++len]=k%n,k/=n;
for(register int l=len;l>0;l--) putchar(b[l]>9?b[l]+55:b[l]+48);putchar(32);//输出,记得要倒序
for(register int l=1;l<=j;l++) putchar(a[l]>9?a[l]+55:a[l]+48);putchar(10);//输出,因为是回文数,倒不倒序无所谓
}
}