借鉴了一下其他大佬的解体思路:

这道题的本质是一道数学题:

通过分裂得到更多的魔法棒,每次分裂的最小的增量为3(选择一个小魔法棒,将其分裂为4根),如果能够找到连续的3个能通过分裂得到数a,a+1,a+2,那么a以后的数都可以由分裂所得。

假设设x = a+m,将m对3取余得r,这个r一定是0,1,2中的一个数那么x可以视为 a+r通过若干个3的增量得到的,

下面证明15,16,17为3个连续的可以通过分裂得到的数:

15 = 4+3+8

16 = 1+3*5;

17 = 9+8;

所以只需要找出15之前复合要求的数即可.除去完全平方数,剩下的是7(4+3),10(7+3),13(10+3),12(9+3),当x等于这些数的时候输出yes即可

#include<bits/stdc++.h>
using namespace std;
void solve(){
    long long x;
    cin>>x;
    long long q = sqrt(x);
    if(x==q*q || x>=15 ||x==12 || x==7 ||x==10 || x==13){
        cout<<"Yes"<<endl;
        return;
    }
    cout<<"No"<<endl;
}
int main(){
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    int t;
    cin>>t;
    while(t--){
        solve();
    }
}