求纠错
查看原帖
求纠错
114914
一只书虫仔楼主2020/6/7 18:31
#include <bits/stdc++.h>

using namespace std;

long long gcd (long long a, long long b) {return b == 0 ? a : gcd(b, a % b);}

int main () {
	long long r;
	scanf("%lld", &r);
	long long ans = 0;
	for (long long i = 1; i * i <= r; i++) {
		if (r % i > 0) 
			continue;
		for (long long j = 1; j * j <= (i >> 1); j++) {
			long long tmp = trunc(sqrt(i - (j * j))); // trunc 是小数去尾函数 —— Description By Shuchong
			if (j * j + tmp * tmp != i)
				continue;
			if ((gcd(j * j, tmp * tmp) == 1) && (j != tmp))
				ans++;
		}
		if (r / i != i) {
			for (long long j = 1; j * j <= (i >> 1); j++) {
				long long tmp = trunc(sqrt((r / i) - (j * j))); // trunc 是小数去尾函数 —— Description By Shuchong
				if (j * j + tmp * tmp != (r / i))
					continue;
				if ((gcd(j * j, tmp * tmp) == 1) && (j != tmp))
					ans++;
			}
		}
	}
	printf("%lld", 4 * (ans + 1));
	return 0;
}

有点迷惑,我开 ll 了啊,为啥还是 30 分捏(

2020/6/7 18:31
加载中...