結果
問題 |
No.2795 Perfect Number
|
ユーザー |
|
提出日時 | 2024-06-28 22:01:27 |
言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
結果 |
TLE
|
実行時間 | - |
コード長 | 2,953 bytes |
コンパイル時間 | 1,823 ms |
コンパイル使用メモリ | 195,380 KB |
最終ジャッジ日時 | 2025-02-22 01:07:03 |
ジャッジサーバーID (参考情報) |
judge3 / judge5 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 16 TLE * 2 -- * 17 |
ソースコード
#include <bits/stdc++.h> using namespace std; using ll = long long; using ld = long double; using ull = unsigned long long; using uint = unsigned; using pii = pair<int, int>; using pll = pair<ll, ll>; template<class T> using pq = priority_queue<T, vector<T>, greater<T>>; const ll LINF=0x1fffffffffffffff; const ll MINF=0x7fffffffffff; const int INF=0x3fffffff; const int MOD=1000000007; const int MOD2=998244353; const ld EPS=1e-9; const ld PI=3.14159265358979323846; const ll dx[] = {0, 1, 0, -1, 1, -1, 1, -1}; const ll dy[] = {1, 0, -1, 0, 1, 1, -1, -1}; #define all(x) (x).begin(), (x).end() #define pb push_back #define eb emplace_back #define mp make_pair #define fi first #define se second #define rep(i, n) rep2(i, 0, n) #define rep2(i, m, n) for (int i = m; i < (n); i++) #define per(i, b) per2(i, 0, b) #define per2(i, a, b) for (int i = int(b) - 1; i >= int(a); i--) #define ALL(c) (c).begin(), (c).end() #define SZ(x) ((int)(x).size()) #define nep(x) next_permutation(ALL(x)) template <class T> using V = vector<T>; template <class T> using VV = V<V<T>>; template <class T> using VVV = V<VV<T>>; template <class T> using VVVV = V<VVV<T>>; template <class T> using V_p = V<pair<T,T>>; template <class T> using n_pq = priority_queue<T>; template <class T> using r_pq = priority_queue<T,vector<T>,greater<T>>; template <class T>ostream &operator<<(ostream &o,const vector<T>&v) {o<<"{";for(int i=0;i<(int)v.size();i++)o<<(i>0?", ":"")<<v[i];o<<"}";return o;} template <class T>ostream &operator<<(ostream &o,const deque<T>&v) {o<<"{";for(int i=0;i<(int)v.size();i++)o<<(i>0?", ":"")<<v[i];o<<"}";return o;} template <class T>ostream &operator<<(ostream &o,const set<T>&v) {o<<"{";for(auto i:v)o<<" "<<i;o<<"}";return o;} ll pow_ll(ll x, ll n) { long long ret = 1; while (n > 0) { if (n & 1) ret *= x; // n の最下位bitが 1 ならば x^(2^i) をかける x *= x; n >>= 1; // n を1bit 左にずらす } return ret; } ll prime_factorize(long long N) { // 答えを表す可変長配列 vector<pair<long long, long long> > res; ll ret = 1; // √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; } ll tmp = 1; rep(i,e+1) { tmp *= p; } ret *= (tmp-1) / (p-1); } // 素数が最後に残ることがありうる if (N != 1) { ret *= (N+1); } return ret; } int main() { ll N; cin >> N; const ll ans = prime_factorize(N); if (ans == 2*N) { cout << "Yes" << endl; } else { cout << "No" << endl; } }