题目链接
一个本原直角三角形指,边长a,b,c且 gcd(a,b,c)=1 可以变形为C=s(s+t) s与t均为奇数且s!=t。那么周长为N的直角三角形可以由周长为P的本原直角三角形推衍而来,此时N%P=0.
int prime[20000],minprime[20000];
unordered_map<ll,ll>s;
void euler(int n) //欧拉筛
{
int c=0,i,j;
for(i=2; i<=n; i++)
{
if(!minprime[i])
prime[++c]=i,minprime[i]=i;
for(j=1; j<=c&&i*prime[j]<=n; j++)
{
minprime[i*prime[j]]=prime[j];
if(i%prime[j]==0)
break;
}
}
int fuck=sqrt(10000009);
for(int i=3; i<=fuck; i=i+2)
{
ll op=min(10000000-(i*i)/i,i-1);
for(int j=1; j<=op; j=j+2)
{
if(gcd(i,j)==1)
{
s[i*i+i*j]++;
}
}
}
}
signed main()
{
euler(10000);
ll t;
read(t);
while(t--)
{
ll n;
read(n);
if(n%2==1)
{
printf("0\n");
continue;
}
ll ans=0;
for(int i=1; i*i<=n; i++)
{
if(n%i==0)
{
if(n/i==i)
{
ans=ans+s[i];
}
else
{
ans=ans+s[i]+s[n/i];
}
}
}
printf("%d\n",ans);
}
}