結果
| 問題 |
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;
}
}