首页 > ACM题库 > HDU-杭电 > HDU 3835-R(N)[解题报告]HOJ
2015
04-13

HDU 3835-R(N)[解题报告]HOJ

R(N)

问题描述 :

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).

输入:

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

输出:

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

样例输入:

2
6
10
25
65

样例输出:

4
0
8
12
16
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)

/*
分析:
    水题。
注意两种特殊情况:
1、0*0+x*x=n,这时候count+=4;
2、x*x+x*x=n,这时候也是count+=4;
然后让a(代码中的)从1开始循环就行了,不用从0开始。

                                                 2012-04-15
*/

#include"stdio.h"
#include"math.h"
int main()
{
	int n;
	int count;
	int a,b;
	int t;
	int temp;
	while(scanf("%d",&n)!=-1)
	{
		if(n==0)
		{
			printf("1\n");
			continue;
		}


		count=0;
		t=n/2;
		a=1;
		while(a*a<t)
		{
			temp=n-a*a;
			b=sqrt(temp);
			if(b*b==temp)
				count+=8;


			a++;
		}


		if((int)sqrt(n)*(int)sqrt(n)*2==n)
			count+=4;
		if((int)sqrt(n)*(int)sqrt(n)==n)
			count+=4;


		printf("%d\n",count);
	}
	return 0;
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

参考:http://blog.csdn.net/ice_crazy/article/details/7463480


  1. 站长好。我是一个准备创业的互联网小白,我们打算做一个有关国*际*游*学的平台。手上也有了一些境外资源。现阶段的团队现在没有cto.原意出让一些管理股寻找一个靠谱的技术专家做合伙人, 不知道是不是能得到您的帮助。发个帖子或者其他方式。期待您的回应。可以加我微信tianxielemon聊聊。

  2. 约瑟夫也用说这么长……很成熟的一个问题了,分治的方法解起来o(n)就可以了,有兴趣可以看看具体数学的第一章,关于约瑟夫问题推导出了一系列的结论,很漂亮

  3. 站长好。我是一个准备创业的互联网小白,我们打算做一个有关国*际*游*学的平台。手上也有了一些境外资源。现阶段的团队现在没有cto.原意出让一些管理股寻找一个靠谱的技术专家做合伙人, 不知道是不是能得到您的帮助。发个帖子或者其他方式。期待您的回应。可以加我微信tianxielemon聊聊。

  4. 因为是要把从字符串s的start位到当前位在hash中重置,修改提交后能accept,但是不修改居然也能accept