結果
問題 | No.2326 Factorial to the Power of Factorial to the... |
ユーザー | Ajinoko33 |
提出日時 | 2023-05-30 19:59:24 |
言語 | C++17 (gcc 12.3.0 + boost 1.83.0) |
結果 |
AC
|
実行時間 | 2 ms / 2,000 ms |
コード長 | 4,154 bytes |
コンパイル時間 | 1,906 ms |
コンパイル使用メモリ | 200,184 KB |
実行使用メモリ | 5,376 KB |
最終ジャッジ日時 | 2024-06-08 20:36:40 |
合計ジャッジ時間 | 2,434 ms |
ジャッジサーバーID (参考情報) |
judge4 / judge5 |
(要ログイン)
テストケース
テストケース表示入力 | 結果 | 実行時間 実行使用メモリ |
---|---|---|
testcase_00 | AC | 2 ms
5,248 KB |
testcase_01 | AC | 2 ms
5,376 KB |
testcase_02 | AC | 2 ms
5,376 KB |
testcase_03 | AC | 2 ms
5,376 KB |
testcase_04 | AC | 2 ms
5,376 KB |
testcase_05 | AC | 2 ms
5,376 KB |
testcase_06 | AC | 2 ms
5,376 KB |
testcase_07 | AC | 2 ms
5,376 KB |
testcase_08 | AC | 2 ms
5,376 KB |
testcase_09 | AC | 2 ms
5,376 KB |
testcase_10 | AC | 1 ms
5,376 KB |
testcase_11 | AC | 2 ms
5,376 KB |
testcase_12 | AC | 2 ms
5,376 KB |
testcase_13 | AC | 2 ms
5,376 KB |
testcase_14 | AC | 2 ms
5,376 KB |
testcase_15 | AC | 2 ms
5,376 KB |
testcase_16 | AC | 2 ms
5,376 KB |
testcase_17 | AC | 2 ms
5,376 KB |
testcase_18 | AC | 2 ms
5,376 KB |
testcase_19 | AC | 1 ms
5,376 KB |
testcase_20 | AC | 1 ms
5,376 KB |
testcase_21 | AC | 2 ms
5,376 KB |
ソースコード
#include <bits/stdc++.h> using namespace std; #define rep(i,n) for(int i=0; i<n; i++) #define Sort(vector) sort(vector.begin(), vector.end()) #define Reverse(vector) reverse(vector.begin(), vector.end()) #define RSort(vector) sort(vector.rbegin(), vector.rend()) using ll = long long; using P = pair<int,int>; using TU = tuple<int,int,int>; using vint = vector<int>; using vvint = vector<vint>; using vvvint = vector<vvint>; using vll = vector<ll>; using vvll = vector<vll>; using vvvll = vector<vvll>; template<typename T> istream &operator>>(istream &is,vector<T> &v){for(T &in:v){is>>in;}return is;} template<typename T> ostream &operator<<(ostream &os,vector<T> &v){for(int i=0;i<(int)v.size();i++){os<<v[i]<<" \n"[i==(int)v.size()-1];}return os;} template<typename T> istream &operator>>(istream &is,vector<vector<T>> &v){for(vector<T> &in:v){is>>in;}return is;} template<typename T> ostream &operator<<(ostream &os,vector<vector<T>> &v){for(vector<T> &out:v){os<<out;}return os;} template<int m> struct Modint{ public: static constexpr int mod() noexcept {return m;} static constexpr Modint raw(int v) noexcept { Modint x; x._v=v; return x; } constexpr Modint() noexcept :_v(0){} template<typename T> constexpr Modint(T v) noexcept { long long x=v%(long long)umod(); if(x<0) x+=umod(); _v=x; } constexpr unsigned int val() const noexcept {return _v;} constexpr Modint& operator++() noexcept { ++_v; if(_v==0) _v=umod(); return *this; } constexpr Modint& operator--() noexcept { if(_v==0) _v=umod(); --_v; return *this; } constexpr Modint operator++(int) noexcept { Modint res=*this; ++*this; return res; } constexpr Modint operator--(int) noexcept { Modint res=*this; --*this; return res; } constexpr Modint& operator+=(const Modint& rhs) noexcept { _v+=rhs._v; if(_v>=umod()) _v-=umod(); return *this; } constexpr Modint& operator-=(const Modint& rhs) noexcept { _v-=rhs._v; if(_v>=umod()) _v+=umod(); return *this; } constexpr Modint& operator*=(const Modint& rhs) noexcept { unsigned long long z=_v; z*=rhs._v; _v=(unsigned int)(z%umod()); return *this; } constexpr Modint& operator/=(const Modint& rhs) noexcept { return *this*=rhs.inv(); } constexpr Modint operator+() const noexcept {return *this;} constexpr Modint operator-() const noexcept {return Modint()-*this;} constexpr Modint pow(long long n) const noexcept { assert(0<=n); Modint x=*this, res=1; while(n){ if(n&1) res*=x; x*=x; n>>=1; } return res; } // 制約: mは素数 constexpr Modint inv() const noexcept { assert(_v); return pow(umod()-2); } friend constexpr Modint operator+(const Modint& lhs,const Modint& rhs) noexcept {return Modint(lhs)+=rhs;} friend constexpr Modint operator-(const Modint& lhs,const Modint& rhs) noexcept {return Modint(lhs)-=rhs;} friend constexpr Modint operator*(const Modint& lhs,const Modint& rhs) noexcept {return Modint(lhs)*=rhs;} friend constexpr Modint operator/(const Modint& lhs,const Modint& rhs) noexcept {return Modint(lhs)/=rhs;} friend constexpr bool operator==(const Modint& lhs,const Modint& rhs) noexcept {return lhs._v==rhs._v;} friend constexpr bool operator!=(const Modint& lhs,const Modint& rhs) noexcept {return lhs._v!=rhs._v;} friend constexpr istream &operator>>(istream &is,Modint &x) noexcept { long long v; is>>v; v%=umod(); if(v<0) v+=umod(); x._v=v; return is; } friend constexpr ostream &operator<<(ostream &os,const Modint &x) noexcept {return os<<x._v;} private: unsigned int _v; static constexpr unsigned int umod() noexcept {return m;} }; // using mint=Modint<998244353>; using mint=Modint<1000000007>; int main(){ int n,p;cin>>n>>p; mint res=0; for(ll val=p;val<=n;val*=p){ res+=n/val; } const ll mod=1e9+7; mint times=1; for(int i=1;i<=n;i++){ times*=i; } ll pow=1; for(int i=1;i<=n;i++){ pow*=i; pow%=mod-1; } res=res*times.pow(pow); cout<< res <<'\n'; return 0; }