hdu 3835 R(N)——勒让德两平方数之和定理
勒让德两平方数之和定理:R(N)=4*D1(N)-4*D3(N)
D1(N)=(整除N 且满足d=1(mod 4)的正约数d 的个数),
D3(N)=(整除N 且满足d=3(mod4)的正约数d 的个数)。
先开始枚举的n的约数,后来超时了,就改成了这个版本的……
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<algorithm>
#include<cmath>
using namespace std;
int main(void)
{
int n;
while(scanf("%d",&n)==1)
{
int d1=0,d3=0;
int i;
for(i=1;i*i<=n;i++)
{
if(n%i==0)
{
if(i%4==1)
d1++;
else if(i%4==3)
d3++;
if(n/i==i)
break;
else
{
int a=n/i;
if(a%4==1)
d1++;
else if(a%4==3)
d3++;
}
}
}
printf("%d\n",4*d1-4*d3);
}
}