結果
| 問題 | No.3776 Magic Square of Product |
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2026-10-23 22:09:47 |
| 言語 | C++23(gcc16) (gcc 16.2.0 + boost 1.92.0 + ACL) |
| 結果 |
AC
不安定
|
| 実行時間 | 271 ms / 2,500 ms |
| + 772µs | |
| コード長 | 1,656 bytes |
| 記録 | |
| コンパイル時間 | 1,911 ms |
| コンパイル使用メモリ | 203,292 KB |
| 実行使用メモリ | 9,908 KB |
| 最終ジャッジ日時 | 2026-10-23 22:10:24 |
| 合計ジャッジ時間 | 10,776 ms |
|
ジャッジサーバーID (参考情報) |
judge1_0 / judge5_0 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 1 |
| other | AC * 25 |
コンパイルメッセージ
main.cpp:35:1: warning: ISO C++ forbids declaration of 'main' with no type [-Wreturn-type]
35 | main() {
| ^~~~
ソースコード
#include <iostream>
#include <vector>
#include <algorithm>
#include <map>
#include <stack>
#include <queue>
using namespace std;
const long long MOD=998244353;
bool calc[30];
long long ff[30];
long long f(long long x) {
if (calc[x]) return ff[x];
calc[x]=true;
long long ret=0;
for (long long a=0;a<=x;a++)
for (long long b=0;(b+a)<=x;b++)
for (long long c=0;(c+a)<=x;c++)
for (long long d=0;max(b,c)+d<=x;d++) {
long long ab = x - a - b;
long long cd = x - c - d;
long long ac = x - a - c;
long long bd = x - b - d;
if ((ab+cd)>x || (ab+cd)!=(ac+bd)) continue;
ret++;
ret%=MOD;
}
//cout<<"f "<<x<<" = "<<ret<<endl;
return ff[x]=ret;
}
main() {
vector <int> p(0);
vector <int> lp(1000000+1, 0);
for (int x=2;x<lp.size();x++) {
if (lp[x]==0) {
lp[x]=x;
p.push_back(x);
}
for (int i=0;i<p.size() && p[i]<=lp[x] && x*p[i]<=1000000; i++)
lp[p[i]*x]=p[i];
}
//cout<<p.size()<<endl;
int t;
cin>>t;
while (t--) {
int n;
cin>>n;
vector <pair<int,int>> m(0);
while (n>1) {
if (m.size()==0 || lp[n]!=m[m.size()-1].first) m.push_back(make_pair(lp[n], 1));
else m[m.size()-1].second++;
n/=lp[n];
}
long long ans=1;
for (auto x : m) {
//cout<<"for "<<x.first<<" : f("<<x.second<<")="<<f(x.second)<<endl;
ans*=f(x.second);
ans%=MOD;
}
cout<<ans<<endl;
}
}