当前位置: 代码迷 >> 综合 >> D.Fake News(数论&结论)
  详细解决方案

D.Fake News(数论&结论)

热度:24   发布时间:2024-02-05 13:34:35.0

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!");}
} 
  相关解决方案