結果

問題 No.3776 Magic Square of Product
コンテスト
ユーザー Tuchmos
提出日時 2026-10-24 01:48:59
言語 C++23(gcc16)
(gcc 16.2.0 + boost 1.92.0 + ACL)
コンパイル:
g++-16 -O2 -lm -std=c++23 -Wuninitialized -DONLINE_JUDGE -o a.out _filename_
実行:
./a.out
結果
RE  
実行時間 -
コード長 2,009 bytes
記録
記録タグの例:
初AC ショートコード 純ショートコード 純主流ショートコード 最速実行時間
コンパイル時間 7,461 ms
コンパイル使用メモリ 392,720 KB
実行使用メモリ 9,868 KB
最終ジャッジ日時 2026-10-24 01:49:15
合計ジャッジ時間 14,931 ms
ジャッジサーバーID
(参考情報)
judge5_0 / judge4_0
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 1
other RE * 1 TLE * 1 -- * 23
権限があれば一括ダウンロードができます

ソースコード

diff #
raw source code

#include <bits/stdc++.h>
#include <atcoder/all>
using namespace std;
using namespace atcoder;
#define all(s) (s).begin(), (s).end()
#define rall(s) (s).rbegin(), (s).rend()
#define rep(i,l,r) for(int i=l;i<r;i++)
#define rrep(i,r,l) for(int i=r;i>l;i--)

using ll=long long;
using mint=modint998244353;

//https://atcoder.jp/contests/adt_all_20260924_2/submissions/79473125

vector<int> smallest_prime_factor(int n){
    vector<int> res(n+1);
    iota(res.begin(),res.end(),0);
    for(int i=2;i*i<=n;i++){
        if(res[i]==i){
            for(int j=i;j<=n;j+=i){
                if(res[j]==j)res[j]=i;
            }
        }
    }
    return res;
}

vector<int> spf=smallest_prime_factor(1000001);

map<int,int> prime_factorization(int n){
    map<int,int> factors;
    int current=n;
    while(current>1){
        factors[spf[current]]++;
        current/=spf[current];
    }
    return factors;
}

vector<int> divisors(int n){
    auto factors=prime_factorization(n);
    vector<int> divs={1};
    for(auto [p,e] :factors){
        int m=divs.size();
        int mul=1;
        for(int k=1;k<=e;k++){
            mul*=p;
            for(int j=0;j<m;j++){
                divs.push_back(divs[j]*mul);
            }
        }
    }
    return divs;
}

int solve(ll K){
    auto D=divisors(K);
    int N=D.size();
    int ans=0;
    rep(i,0,N)rep(j,0,N){
        if(K%(D[i]*D[j]))continue;
        int a=D[i];
        int b=D[j];
        int c=K/a/b;
        auto D1=divisors(K/a);
        auto D2=divisors(K/b);
        for(int d:D1){
            int e=K/a/d;
            for(int f:D2){
                if(K%(d*f)||K%(b*f))continue;
                int h=K/d/f;
                int g=K/b/f;
                if(K%(c*h))continue;
                int l=K/c/h;
                if((ll)e*g*l==K)ans++;
            }
        }
    }
    return ans;
}

int main(){
    ios::sync_with_stdio(false);
    cin.tie(nullptr);

    int T;cin>>T;
    while(T--){
        ll K;cin>>K;
        cout<<solve(K)<<'\n';
    }
}
0