結果

問題 No.3776 Magic Square of Product
コンテスト
ユーザー yuunegi
提出日時 2026-10-23 22:43:42
言語 C++23
(gcc 15.3.0 + boost 1.92.0 + ACL)
コンパイル:
g++-15 -O2 -lm -std=c++23 -Wuninitialized -DONLINE_JUDGE -o a.out _filename_
実行:
./a.out
結果
AC  
実行時間 272 ms / 2,500 ms
+ 43µs
コード長 1,483 bytes
記録
記録タグの例:
初AC ショートコード 純ショートコード 純主流ショートコード 最速実行時間
コンパイル時間 2,333 ms
コンパイル使用メモリ 342,796 KB
実行使用メモリ 11,476 KB
最終ジャッジ日時 2026-10-23 22:44:00
合計ジャッジ時間 9,816 ms
ジャッジサーバーID
(参考情報)
judge6_0 / judge2_0
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 1
other AC * 25
権限があれば一括ダウンロードができます

ソースコード

diff #
raw source code

#include <bits/stdc++.h>
using namespace std;
int main(void){
    vector<long long>ar(21,0);
    for(int i=0;i<20;i++)for(int i2=0;i2<20-i;i2++)for(int i3=0;i3<20-i;i3++)for(int i4=0;i4<20-max(i2,i3);i4++){
        ar[min(20,max({i+i2,i2+i4,i3+i,i4+i3}))]++;
        ar[min(20,(i+i4+i2+i3)+1)]--;
    }
    for(int i=0;i<20;i++)ar[i+1]+=ar[i];
    // for(int i=0;i<20;i++)cout<<ar[i]<<" ";
    // cout<<endl;
    const int spfs=1000001;
    long long spf[spfs]={};
    for(long long i=2;i<spfs;i++){
        if(spf[i]==0){
            spf[i]=i;
            for(long long j=i*i;j<spfs;j+=i){
                if(spf[j]==0)spf[j]=i;
            }
        }
    }
    int t;
    cin>>t;
    while(t--){
        int a;
        cin>>a;
        vector<array<int,2>>tmp;
        while(a!=1){
            int nx=spf[a];
            tmp.push_back({(int)spf[a],1});
            a/=spf[a];
            while(spf[a]==nx){
                tmp[(int)tmp.size()-1][1]++;
                a/=spf[a];
            }
        }
        vector<int>divis={1};
        for(int j=0;j<(int)tmp.size();j++){
            int ts=divis.size(),bi=1;
            for(int k=0;k<tmp[j][1];k++){
                bi*=tmp[j][0];
                for(int l=0;l<ts;l++){
                    divis.push_back(divis[l]*bi);
                }
            }
        }
        long long ans=1;
        for(auto x:tmp){
            ans*=ar[x[1]];
            ans%=998244353;
        }
        cout<<ans<<endl;
    }
    return 0;
}
0