結果

問題 No.1737 One to N
ユーザー Mat_hMat_h
提出日時 2021-11-12 22:20:56
言語 C++14
(gcc 12.3.0 + boost 1.83.0)
結果
AC  
実行時間 3 ms / 2,000 ms
コード長 6,080 bytes
コンパイル時間 2,023 ms
コンパイル使用メモリ 186,616 KB
実行使用メモリ 6,944 KB
最終ジャッジ日時 2024-05-04 09:21:05
合計ジャッジ時間 2,820 ms
ジャッジサーバーID
(参考情報)
judge4 / judge2
このコードへのチャレンジ
(要ログイン)

テストケース

テストケース表示
入力 結果 実行時間
実行使用メモリ
testcase_00 AC 2 ms
6,812 KB
testcase_01 AC 2 ms
6,816 KB
testcase_02 AC 2 ms
6,812 KB
testcase_03 AC 2 ms
6,944 KB
testcase_04 AC 2 ms
6,944 KB
testcase_05 AC 2 ms
6,940 KB
testcase_06 AC 2 ms
6,940 KB
testcase_07 AC 1 ms
6,940 KB
testcase_08 AC 2 ms
6,944 KB
testcase_09 AC 2 ms
6,940 KB
testcase_10 AC 1 ms
6,940 KB
testcase_11 AC 1 ms
6,944 KB
testcase_12 AC 2 ms
6,940 KB
testcase_13 AC 2 ms
6,944 KB
testcase_14 AC 2 ms
6,944 KB
testcase_15 AC 1 ms
6,940 KB
testcase_16 AC 2 ms
6,940 KB
testcase_17 AC 2 ms
6,944 KB
testcase_18 AC 2 ms
6,944 KB
testcase_19 AC 2 ms
6,944 KB
testcase_20 AC 3 ms
6,944 KB
testcase_21 AC 2 ms
6,940 KB
testcase_22 AC 1 ms
6,940 KB
testcase_23 AC 2 ms
6,944 KB
testcase_24 AC 1 ms
6,940 KB
testcase_25 AC 2 ms
6,940 KB
testcase_26 AC 1 ms
6,944 KB
testcase_27 AC 2 ms
6,940 KB
testcase_28 AC 2 ms
6,944 KB
testcase_29 AC 2 ms
6,940 KB
権限があれば一括ダウンロードができます

ソースコード

diff #

#include<bits/stdc++.h>

const int MAX = 510000;
const int MOD = 1e9+7;
const double PI = 3.14159265358979323846264338327950288;

long long fac[MAX], finv[MAX], inv[MAX]; 

#define _GLIBCXX_DEBUG
#define int long long
#define _yes {cout<<"yes"<<endl;}
#define _no {cout<<"no"<<endl;}
#define _Yes {cout<<"Yes"<<endl;}
#define _No {cout<<"No"<<endl;}
#define _YES {cout<<"YES"<<endl;}
#define _NO {cout<<"NO"<<endl;}
#define _ans {cout<<ans<<endl;}
#define _count {cout<<count<<endl;}
#define rep(i,n) for(int i=0;i<n;i++)
#define rep1(i,n) for(int i=1;i<=n;i++)
#define ALL(obj) (obj).begin(), (obj).end()
#define rALL(obj) (obj).rbegin(), (obj).rend()

using namespace std;

using ll = long long;
using vc = vector<char>;
using vd = vector<double>;
using vi = vector<int>;
using vs = vector<string>;
using si = set<int>;
using qi = queue<int>;

using vvc = vector<vc>;
using vvd = vector<vd>;
using vvi = vector<vi>;
using vvs = vector<vs>;
using vvvi = vector<vector<vector<int>>>;

using pii = pair<int, int>;
using psi = pair<string, int>;
using pis = pair<int, string>;
using pic = pair<int, char>;
using pdd = pair<double, double>;
using pds = pair<double, string>;
using psd = pair<string, double>;

using vpii = vector<pii>;
using vpic = vector<pic>;
using vpsi = vector<psi>;
using vpis = vector<pis>;
using vpdd = vector<pdd>;
using vpds = vector<pds>;
using vpsd = vector<psd>;

using tiii = tuple<int, int, int>;
using tsii = tuple<string, int, int>;
using tiis = tuple<int, int, string>;
using vtiii = vector<tiii>;

using mii = map<int, int>;


using Graph=vvi; 

int FACT(ll n){if(n==0){return 1;}else{ll base=1;for(ll i=1;i<=n;i++){base*=i;}return base;}}//n!
int FACTmod(ll n, int mod){if(n==0){return 1;}else{ll base=1;for(ll i=1;i<=n;i++){base=base*i%mod;}return base;}}//n!%mod

vi DIVISOR(int n){
    vi v;
    for (int i=1;i*i<=n;i++){
        if(n%i==0) {v.push_back(i); 
        if(i*i!=n)v.push_back(n/i);}
    }
sort(ALL(v)); return v;} // 整数nの約数の昇順配列を出力


bool is_prime(long long N) {
    if (N == 1) return false;
    for (long long i = 2; i * i <= N; ++i) {
        if (N % i == 0) return false;
    }
    return true;
} //素数判定

vi VEC_PRIME(int n) {
    // エラトステネスのふるい
    vi v;
    bitset<1000000> is_prime(0); // 十分大きなサイズを確保します
    for (int i = 2; i <= n; ++i) is_prime.set(i); // とりあえず全部ふるいに入れます
    for (int i = 2; i <= n; ++i) {
        if (is_prime[i]) { // 素数 i を発見したら
            for (int j = i * 2; j <= n; j += i) {
                is_prime.reset(j); // i の倍数をふるい落とす
            }
        }
    }
    // 結果出力
    for (int i = 2; i <= n; ++i) {
        if (is_prime[i]) v.push_back(i);
       
    } 
    return v;
}


void NCRinit(){fac[0]=fac[1]=1;finv[0]=finv[1]=1;inv[1]=1;for(int i=2; i<MAX; i++){fac[i]=fac[i-1]*i%MOD;inv[i]=MOD-inv[MOD%i]*(MOD/i)%MOD;finv[i]=finv[i-1]*inv[i]%MOD;}}//二項係数前処理
long long NCR(int n,int k){if(n<k)return 0;if(n<0 || k<0){return 0;}return fac[n]*(finv[k]*finv[n-k]%MOD)%MOD;}// 二項係数計算/mod

long long POW(ll x, ll n) {ll ret = 1;while (n>0){if(n&1)ret*=x;x*=x;n>>=1;}return ret;}//x^n
long long POWmod(int x,int n, int mod) {long long ret=1;while(n>0) {if(n&1)ret=ret*x%mod;x=x*x%mod;n>>=1;}return ret;}//x^n%mod

ll GCD(ll x, ll y) {while(y>0){ll r=x%y;x=y;y=r;}return x;}//gcd
ll LCM(ll x, ll y){return (x/GCD(x,y))*y;}//lcm

int mNCR(int n,int r){
    if(n<r){return  0;}
    else if(r==0){return 1;}
    else{int x=1,ans=1;
    for(int i=n;i>n-r;i--){
        ans=ans*i/x;
        x++;
    }
    return ans;
    }
}//n.r小さいときのnCr

vector<pair<long long, long long> > prime_factorize(long long N) {
    vector<pair<long long, long long> > res;
    for (long long a = 2; a * a <= N; ++a) {
        if (N % a != 0) continue;
        long long ex = 0;
        while (N % a == 0) {
            ++ex;
            N /= a;
        }
        res.push_back({a, ex});
    }
    if (N != 1) res.push_back({N, 1});
    return res;
} //素因数分解

int MINVEC(vi v){
    int min=2147483647;
    int ans=0;
    int n=v.size();
    rep(i,n){
        if(v[i]<=min){min=v[i];ans=i;}
    }
    return ans;
}  //viの最小項の番号を返す;//最大番号優先

int MAXVEC(vi v){
    int max=-2147483648;
    int ans=0;
    int n=v.size();
    rep(i,n){
        if(v[i]>=max){max=v[i];ans=i;}
    }
    return ans;
}  //viの最大項の番号を返す;//最大番号優先

// aよりもbが大きいならばaをbで更新する
// (更新されたならばtrueを返す)
template <typename T>
bool chmax(T &a, const T& b) {
  if (a < b) {
    a = b;  // aをbで更新
    return true;
  }
  return false;
}
// aよりもbが小さいならばaをbで更新する
// (更新されたならばtrueを返す)
template <typename T>
bool chmin(T &a, const T& b) {
  if (a > b) {
    a = b;  // aをbで更新
    return true;
  }
  return false;
}

int MASSVEC(vi v, int x, int y){
    int ans=0;
    for(int i=x;i<=y;i++){
        ans+=v[i];
    }
    return ans;
} //ベクトルのx番目からy番目までの総和

vector<pair<int, int>> SECONDSORT(vector<pair<int,int>> v){
    int n=v.size();
    rep(i,n){swap(v[i].first,v[i].second);}
    sort(ALL(v));
    rep(i,n){swap(v[i].first,v[i].second);}
    return v;
} //vpiiをsecond優先で昇順ソート

vector<pair<int, int>> SECONDrSORT(vector<pair<int,int>> v){
    int n=v.size();
    rep(i,n){swap(v[i].first,v[i].second);}
    sort(rALL(v));
    rep(i,n){swap(v[i].first,v[i].second);}
    return v;
} //vpiiをsecond優先で降順ソート

int BINARY(int bina){
    int ans = 0;
    for (int i = 0; bina>0 ; i++)
    {
        ans = ans+(bina%2)*POW(10,i);
        bina = bina/2;
    }
    return ans;
}
//10進数を2進数に変換


//ABCDEFGHIJKLMNOPQRSTUVWXYZ
//abcdefghijklmnopqrstuvwxyz

signed main(void){
int n;
cin>>n;

vpii v=prime_factorize(n);
int mass=0;
rep(i,(int)(v.size())){
    mass+=v[i].first*v[i].second;
}
cout<<mass<<endl;
}

0