D.Fake News(数论&结论)

思路:

1.结论题。只有 10 , 24 10,24 10,24满足是平方和数。

​证明传送门​

2.因为平方和公式 n ( n + 1 ) ( 2 n + 1 ) 6 \dfrac{n(n+1)(2n+1)}{6} 6n(n+1)(2n+1)​

n , ( n + 1 ) , ( 2 n + 1 ) n,(n+1),(2n+1) n,(n+1),(2n+1)两两互质,考虑除以 6 6 6后,若每个数能分解为平方数,则 平方和也能分解为平方数。

#include<cstdio>
#include<cmath>
using namespace std;
typedef long long ll;
#define fun(x) x==(ll)sqrt(x)*(ll)sqrt(x)
bool jg(ll x){
ll a[3]={x,x+1,2*x+1},y=6;
for(int i=0;i<3;i++){
if(a[i]%2==0&&y!=1) a[i]/=2,y/=2;
if(a[i]%3==0&&y!=1) a[i]/=3,y/=3;
}
return fun(a[0])&&fun(a[1])&&fun(a[2]);
}
int main(){
int t;ll n;scanf("%d",&t);
while(t--){
scanf("%lld",&n);
puts(jg(n)?"Fake news!":"Nobody knows it better than me!");
}
}