R(N)

来源:互联网 发布:kettle java开发 编辑:程序博客网 时间:2024/06/08 09:53

http://acm.hdu.edu.cn/showproblem.php?pid=3835

Problem Description
We know that some positive integer x can be expressed as x=A^2+B^2(A,B are integers). Take x=10 for example,
10=(-3)^2+1^2.
We define R(N) (N is positive) to be the total number of variable presentation of N. So R(1)=4, which consists of 1=1^2+0^2, 1=(-1)^2+0^2, 1=0^2+1^2, 1=0^2+(-1)^2.Given N, you are to calculate R(N).
 

Input
No more than 100 test cases. Each case contains only one integer N(N<=10^9).
 

Output
For each N, print R(N) in one line.
 

Sample Input
26102565
 

Sample Output
4081216
Hint
For the fourth test case, (A,B) can be (0,5), (0,-5), (5,0), (-5,0), (3,4), (3,-4), (-3,4), (-3,-4), (4,3) , (4,-3), (-4,3), (-4,-3)
 &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
此题给的数据很大~10^9,用双层循环肯定要超时,因此,想到了毛哥哥的算法,用判断代替一层循环;节省很多时间;15ms
#include<stdio.h>#include<math.h>int main(){int i,j,k,m,n,sum;while(scanf("%d",&m)!=EOF){sum=0;n=(int)(sqrt(m)+1);if(m==0){    printf("1\n");    continue;}for(i=0;i<n;i++){k=(int)(sqrt(m-i*i));if(k*k+i*i==m){if(k==i)sum+=4;else if(k<i)sum+=8;}}printf("%d\n",sum);}return 0;}



原创粉丝点击