2 条题解

  • 2
    @ 2026-8-12 18:50:14

    观察数据范围发现枚举肯定是超时的,考虑更优的解法。

    很显然,如果 nn 为奇数直接输出YES即可,因为 n≡0(mod n)n\equiv0(mod\ n)。

    讨论 nn 为偶数的情况。由唯一分解定理知,n=2x×yn=2^x\times y。容易发现,nn 含有奇因子⇔\Leftrightarrow yy 是奇数,只需要求出 yy 后判断一下就可得出答案。

    时间复杂度 O(T⋅log⁡n)O(T \cdot \log n)。

    #include<bits/stdc++.h>
    using namespace std;
    #define int long long
    signed main(){
        int T;
        cin>>T;
        while(T--){
            int n;
            cin>>n;
            if(n%2==1){
                cout<<"YES\n";
                continue;
            }
            while(n%2==0)n/=2;
            if(n%2==1 && n!=1)cout<<"YES\n";
            else cout<<"NO\n";
        }
    }
    

    信息

    ID
    7294
    时间
    2000ms
    内存
    256MiB
    难度
    1
    标签
    递交数
    11
    已通过
    5
    上传者