记录编号 56850 评测结果 AAAAAAAAAA
题目名称 [HAOI 2008]圆上的整点 最终得分 100
用户昵称 Gravatarcstdio 是否通过 通过
代码语言 C++ 运行时间 0.018 s
提交时间 2013-04-04 11:35:08 内存使用 0.31 MiB
显示代码纯文本
#include<iostream>
#include<cstdio>
#include<cmath>
using namespace std;
long long gcd(long long a,long long b){
	if(b==0) return a;
	else return gcd(b,a%b);
}
long long n,ans=0;
long long calc(long long r){//和为r,且互质
	long long sum=0;
	long long i,temp;
	for(i=1;i*i<r;i++){
		temp=r-i*i;
		temp=(int)sqrt((double)temp);
		if(temp<=i) break;
		if(temp*temp+i*i==r&&gcd(i,temp)==1&&((temp*temp-i*i)&1)){
			//互质的勾股数,一条直角边为奇数,这样可以去重!
			sum++;
		}
	}
	return sum*2;
}
int main(){
	freopen("cir.in","r",stdin);
	freopen("cir.out","w",stdout);
	cin>>n;
	long long i;
	for(i=1;i*i<=n;i++){
		if(n%i) continue;
		ans+=calc(i);
		if(i*i==n) break;
		ans+=calc(n/i);
	}
	cout<<ans*4+4<<endl;
	return 0;
}