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";
        }
    }
    
    • 0
      @ 2026-8-11 22:06:11
      #include<iostream>
      #include<map>
      #define int long long
      using namespace std; 
      
      map<int,int> mp;
      
      signed main(){
          int x=1;
          for(int i=1;i<=42;i++){
              x*=2;
              mp[x]=1;
          }
          int t;
          cin>>t;
          while(t--){
              int n;
              cin>>n;
              if(mp.count(n)){
                  cout<<"NO\n";
              }else{
                  cout<<"YES\n";
              }
          }
      }
      
      • 1

      信息

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