結果

問題 No.2074 Product is Square ?
ユーザー dyktr_06dyktr_06
提出日時 2022-09-16 22:25:47
言語 C++14
(gcc 12.3.0 + boost 1.83.0)
結果
AC  
実行時間 469 ms / 2,000 ms
コード長 4,034 bytes
コンパイル時間 1,940 ms
コンパイル使用メモリ 185,404 KB
実行使用メモリ 6,944 KB
最終ジャッジ日時 2024-06-01 13:30:41
合計ジャッジ時間 7,366 ms
ジャッジサーバーID
(参考情報)
judge3 / judge1
このコードへのチャレンジ
(要ログイン)

テストケース

テストケース表示
入力 結果 実行時間
実行使用メモリ
testcase_00 AC 2 ms
6,816 KB
testcase_01 AC 101 ms
6,944 KB
testcase_02 AC 101 ms
6,944 KB
testcase_03 AC 107 ms
6,940 KB
testcase_04 AC 104 ms
6,940 KB
testcase_05 AC 106 ms
6,944 KB
testcase_06 AC 111 ms
6,940 KB
testcase_07 AC 109 ms
6,944 KB
testcase_08 AC 108 ms
6,940 KB
testcase_09 AC 105 ms
6,944 KB
testcase_10 AC 103 ms
6,940 KB
testcase_11 AC 28 ms
6,940 KB
testcase_12 AC 106 ms
6,944 KB
testcase_13 AC 452 ms
6,944 KB
testcase_14 AC 74 ms
6,940 KB
testcase_15 AC 27 ms
6,944 KB
testcase_16 AC 112 ms
6,940 KB
testcase_17 AC 469 ms
6,940 KB
testcase_18 AC 79 ms
6,940 KB
testcase_19 AC 27 ms
6,940 KB
testcase_20 AC 114 ms
6,940 KB
testcase_21 AC 454 ms
6,940 KB
testcase_22 AC 74 ms
6,944 KB
testcase_23 AC 27 ms
6,940 KB
testcase_24 AC 112 ms
6,940 KB
testcase_25 AC 455 ms
6,940 KB
testcase_26 AC 79 ms
6,944 KB
testcase_27 AC 27 ms
6,944 KB
testcase_28 AC 120 ms
6,944 KB
testcase_29 AC 453 ms
6,940 KB
testcase_30 AC 75 ms
6,944 KB
testcase_31 AC 11 ms
6,944 KB
testcase_32 AC 2 ms
6,940 KB
testcase_33 AC 4 ms
6,944 KB
権限があれば一括ダウンロードができます
コンパイルメッセージ
main.cpp: In function 'void in(T& ...)':
main.cpp:28:55: warning: fold-expressions only available with '-std=c++17' or '-std=gnu++17' [-Wc++17-extensions]
   28 | template<class... T> void in(T&... a){ (cin >> ... >> a); }
      |                                                       ^
main.cpp: In function 'void out(const T&, const Ts& ...)':
main.cpp:30:112: warning: fold-expressions only available with '-std=c++17' or '-std=gnu++17' [-Wc++17-extensions]
   30 | template<class T, class... Ts> void out(const T& a, const Ts&... b){ cout << a; (cout << ... << (cout << ' ', b)); cout << '\n'; }
      |                                                                                                                ^
main.cpp: In function 'void solve()':
main.cpp:114:18: warning: structured bindings only available with '-std=c++17' or '-std=gnu++17' [-Wc++17-extensions]
  114 |         for(auto [k, x] : mp){
      |                  ^

ソースコード

diff #

#include <bits/stdc++.h>

using namespace std;

#define rep(i,n) for(int i = 0; i < (int)(n); ++i)
#define rrep(i,n) for(int i = (int)(n) - 1; i >= 0; --i)
#define ALL(a) a.begin(), a.end()
#define Sort(a) sort(a.begin(), a.end())
#define RSort(a) sort(a.rbegin(), a.rend())

typedef long long int ll;
typedef long double ld;
typedef vector<int> vi;
typedef vector<long long> vll;
typedef vector<char> vc;
typedef vector<string> vst;
typedef vector<double> vd;
typedef pair<long long, long long> P;

const long long INF = 0x1fffffffffffffff;
const long long MOD = 998244353;
const long double PI = acos(-1);
 
template<class T> inline bool chmax(T& a, T b) { if (a < b) { a = b; return 1; } return 0; }
template<class T> inline bool chmin(T& a, T b) { if (a > b) { a = b; return 1; } return 0; }
template<class T, class U> inline T vin(T& vec, U n) { vec.resize(n); for(int i = 0; i < (int) n; ++i) cin >> vec[i]; return vec; }
template<class T> inline void vout(T vec, string s = "\n"){ for(auto x : vec) cout << x << s; }
template<class... T> void in(T&... a){ (cin >> ... >> a); }
void out(){ cout << '\n'; }
template<class T, class... Ts> void out(const T& a, const Ts&... b){ cout << a; (cout << ... << (cout << ' ', b)); cout << '\n'; }
template<class T, class U> void inGraph(vector<vector<T>>& G, U n, U m, bool directed = false){ G.resize(n); for(int i = 0; i < m; i++){ int a, b; cin >> a >> b; a--, b--; G[a].push_back(b); if(!directed) G[b].push_back(a); } }

// https://judge.yosupo.jp/submission/93061
typedef long long LL;
typedef unsigned long long ULL;
namespace Rho {
    ULL mult(ULL a, ULL b, ULL mod) {
        LL ret = a * b - mod * (ULL)(1.0L / mod * a * b);
        return ret + mod * (ret < 0) - mod * (ret >= (LL) mod);
    }

    ULL power(ULL x, ULL p, ULL mod){
        ULL s=1, m=x;
        while(p) {
            if(p&1) s = mult(s, m, mod);
            p>>=1;
            m = mult(m, m, mod);
        }
        return s;
    }

    vector<LL> bases = {2, 325, 9375, 28178, 450775, 9780504, 1795265022};
    bool isprime(LL n) {
        if (n<2)    return 0;
        if (n%2==0)   return n==2;

        ULL s = __builtin_ctzll(n-1), d = n>>s;
        for (ULL x: bases) {
            ULL p = power(x%n, d, n), t = s;
            while (p!=1 && p!=n-1 && x%n && t--) p = mult(p, p, n);
            if (p!=n-1 && t != s)               return 0;
        }
        return 1;
    }

    ///Returns a proper divisor if n is composite, n otherwise
    ///Possible Optimization: use binary gcd for ~10% speedup
    mt19937_64 rng(chrono::system_clock::now().time_since_epoch().count());
    ULL FindFactor(ULL n) {
        if (n == 1 || isprime(n))    return n;
        ULL c = 1, x = 0, y = 0, t = 0, prod = 2, x0 = 1, q;
        auto f = [&](ULL X) { return mult(X, X, n) + c;};

        while (t++ % 128 or __gcd(prod, n) == 1) {
            if (x == y) c = rng()%(n-1)+1, x = x0, y = f(x);
            if ((q = mult(prod, max(x, y) - min(x, y), n))) prod = q;
            x = f(x), y = f(f(y));
        }
        return __gcd(prod, n);
    }

    ///Returns all prime factors
    vector<ULL> factorize(ULL x) {
        if (x == 1)     return {};
        ULL a = FindFactor(x), b = x/a;
        if (a == x) return {a};
        vector<ULL> L = factorize(a), R = factorize(b);
        L.insert(L.end(), R.begin(), R.end());
        return L;
    }
}

ll t;

void input(){
    in(t);
}
 
void solve(){
    while(t--){
        ll n; in(n);
        map<ll, ll> mp;
        vll a; vin(a, n);
        rep(i, n){
            vector<ULL> f = Rho::factorize(a[i]);
            for(auto x : f){
                if(mp.count(x) == 0){
                    mp[x] = 0;
                }
                mp[x]++;
            }
        }
        string ans = "Yes";
        for(auto [k, x] : mp){
            if(x % 2 == 1){
                ans = "No";
                break;
            }
        }
        out(ans);
    }
}

int main(){
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    
    input();
    solve();
}
0