下午做了昨天的多校联合比赛。。。小写下题解。
把一个数分解为 N = X^2 + Y^2 .N X Y都为整数。
直接枚举,枚举X,然后通过N算出Y,看Y是否为整数。
因为可以为负数,所以考虑X Y相等还有任意一个为0的情况,这几种都是4种的,其他都是8种。
#include <queue>
#include <stack>
#include <math.h>
#include <stdio.h>
#include <stdlib.h>
#include <iostream>
#include <limits.h>
#include <string.h>
#include <string>
#include <algorithm>
using namespace std;
int main()
{
int n;
while( ~scanf("%d",&n) )
{
if( n == 0 )
{
printf("1\n");
continue;
}
int len = (int)(sqrt(double(n/2.0)));
int cnt = 0;
int p = 0;
int f = 0;
for(int i=0; i<=len; i++)
{
int k = (int)sqrt((double)n - i*i);
if( i*i + k*k != n )
continue;
cnt++;
if( i == 0 )
f = 1;
if( i == k )
p++;
}
int ans = 0;
cnt -= p; cnt -= f;
ans += cnt*8;
ans += f*4;
ans += p*4;
printf("%d\n",ans);
}
return 0;
}