結果
問題 | No.1514 Squared Matching |
ユーザー | 沙耶花 |
提出日時 | 2021-05-21 21:54:48 |
言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 1,414 ms / 4,000 ms |
コード長 | 818 bytes |
コンパイル時間 | 4,206 ms |
コンパイル使用メモリ | 250,876 KB |
最終ジャッジ日時 | 2025-01-21 14:56:47 |
ジャッジサーバーID (参考情報) |
judge2 / judge2 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | AC * 26 |
ソースコード
#include <stdio.h> #include <bits/stdc++.h> #include <atcoder/all> using namespace atcoder; using mint = modint998244353; using namespace std; #define rep(i,n) for (int i = 0; i < (n); ++i) #define Inf 1000000001 int main(){ int N; cin>>N; vector<int> p; vector<int> np(N+1,-1); for(int i=2;i<=N;i++){ if(np[i]==-1){ p.push_back(i); np[i] = i; } rep(j,p.size()){ if(p[j]*i>N||p[j]>np[i]){ break; } np[p[j]*i] = p[j]; } } vector<int> cnt(N+1,0); cnt[1] = 1; for(int i=2;i<=N;i++){ if(np[i]==i){ cnt[i]++; } else{ int T = np[i]; if(np[i/T]%T==0){ T = np[i/T]/T; } else{ T = np[i/T]*T; } np[i] = T; cnt[T]++; } } long long ans = 0LL; rep(i,N+1){ long long t = cnt[i]; t *= t; ans += t; } cout<<ans<<endl; return 0; }