bzoj1041[HAOI2008]圆上的整点 数论

Posted GXZlegend

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了bzoj1041[HAOI2008]圆上的整点 数论相关的知识,希望对你有一定的参考价值。

题目描述

求一个给定的圆(x^2+y^2=r^2),在圆周上有多少个点的坐标是整数。

输入

只有一个正整数n,n<=2000 000 000

输出

整点个数

样例输入

4

样例输出

4


题解

数论

#include <cmath>
#include <cstdio>
typedef long long ll;
ll judge(ll k)
{
	ll t = (ll)sqrt(k);
	return t * t == k ? t : 0;
}
ll gcd(ll a , ll b)
{
	return b ? gcd(b , a % b) : a;
}
ll calc(ll k)
{
	ll i , t , ans = 0;
	for(i = 1 ; i * i <= k / 2 ; i ++ )
	{
		t = judge(k - i * i);
		if(t && gcd(i , t) == 1) ans ++ ;
	}
	return ans;
}
int main()
{
	ll n , i , ans = 0;
	scanf("%lld" , &n);
	for(i = 1 ; i * i <= 2 * n ; i ++ )
	{
		if(2 * n % i == 0)
		{
			ans += calc(i);
			if(i * i != 2 * n) ans += calc(2 * n / i);
		}
	}
	printf("%lld\\n" , ans * 4);
	return 0;
}

 

以上是关于bzoj1041[HAOI2008]圆上的整点 数论的主要内容,如果未能解决你的问题,请参考以下文章

bzoj 1041: [HAOI2008]圆上的整点

BZOJ1041 [HAOI2008]圆上的整点

BZOJ 1041: [HAOI2008]圆上的整点

bzoj1041 [HAOI2008]圆上的整点

BZOJ 1041: [HAOI2008]圆上的整点

bzoj1041[HAOI2008]圆上的整点 数论