如果一个数有 4n+1 形式的素因子,那么它可以是某组勾股数里最大的那个数。
否则不是。
https://www.codechef.com/OCT15/problems/ADTR
vector<bool>generate(int n){
vector<bool> input(n + 1, true);
vector<bool> ans(n + 1, false);
int sqrtN = (int)sqrt(n);
for (int i = 2; i <= sqrtN; i ++) { //素数打表(高效)
if(!input[i])
continue;
for(int j = i * i; j <= n; j += i)
input[j] = false;
}
for(long int i = 2; i < n ;i++){
if(input[i]){
if(i%4==1){
for(long int j=i;j<=n;j+=i) //因子符合,所有倍数都符合
ans[j] = true;
}
}
}
return ans;
}
int main(){
vector<bool> primes = generate(5000005);
if(primes[a])
printf("YES\n");
else
printf("NO\n");