結果
問題 |
No.1737 One to N
|
ユーザー |
![]() |
提出日時 | 2025-05-08 19:18:52 |
言語 | C++23 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 2 ms / 2,000 ms |
コード長 | 1,048 bytes |
コンパイル時間 | 3,460 ms |
コンパイル使用メモリ | 277,132 KB |
実行使用メモリ | 7,844 KB |
最終ジャッジ日時 | 2025-05-08 19:18:57 |
合計ジャッジ時間 | 4,681 ms |
ジャッジサーバーID (参考情報) |
judge2 / judge3 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 27 |
ソースコード
#include <bits/stdc++.h> using namespace std; vector<pair<long long, long long>> prime_factorize(long long N) { // 答えを表す可変長配列 vector<pair<long long, long long>> res; // √N まで試し割っていく for (long long p = 2; p * p <= N; ++p) { // N が p で割り切れないならばスキップ if (N % p != 0) { continue; } // N の素因数 p に対する指数を求める int e = 0; while (N % p == 0) { // 指数を 1 増やす ++e; // N を p で割る N /= p; } // 答えに追加 res.emplace_back(p, e); } // 素数が最後に残ることがありうる if (N != 1) { res.emplace_back(N, 1); } return res; } int main() { int N; cin >> N; vector<pair<long long, long long>> pf = prime_factorize(N); long long ans = 0; for (auto [p, e] : pf) { ans += p * e; } cout << ans; }