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);
}
}

  

你可能感兴趣的:(HDU)