D.Fake News(数论&结论)
思路:
1.结论题。只有
满足是平方和数。
证明传送门
2.因为平方和公式
两两互质,考虑除以 后,若每个数能分解为平方数,则 平方和也能分解为平方数。
#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!");}
}