D.Fake News(数论&结论)

D.Fake News(数论&结论)

思路:

1.结论题。只有 10 , 24 10,24 满足是平方和数。
证明传送门
2.因为平方和公式 n ( n + 1 ) ( 2 n + 1 ) 6 \dfrac{n(n+1)(2n+1)}{6}

n , ( n + 1 ) , ( 2 n + 1 ) n,(n+1),(2n+1) 两两互质,考虑除以 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!");
	}
} 

猜你喜欢

转载自blog.csdn.net/weixin_45750972/article/details/107749503