結果
問題 | No.502 階乗を計算するだけ |
ユーザー |
![]() |
提出日時 | 2023-01-13 22:23:54 |
言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 43 ms / 1,000 ms |
コード長 | 5,182 bytes |
コンパイル時間 | 3,584 ms |
コンパイル使用メモリ | 257,808 KB |
最終ジャッジ日時 | 2025-02-10 02:45:53 |
ジャッジサーバーID (参考情報) |
judge3 / judge1 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | AC * 52 |
ソースコード
#include<bits/stdc++.h>#include<atcoder/all>#define rep(i,n) for (int i = 0; i < int(n); ++i)#define repp(i,n,m) for (int i = m; i < int(n); ++i)#define reb(i,n) for (int i = int(n)-1; i >= 0; --i)#define all(v) v.begin(),v.end()using namespace std;using namespace atcoder;using ll = long long;using ull = unsigned long long;using ld = long double;using P = pair<int, int>;using PL = pair<long long, long long>;using pdd = pair<long double, long double>;using pil = pair<int,ll>;using pli = pair<ll,int>;template<class T>istream &operator>>(istream &is,vector<T> &v){for(auto &e:v)is>>e;return is;}template<typename T>bool range(T a,T b,T x){return (a<=x&&x<b);}template<typename T>bool rrange(T a,T b,T c,T d,T x,T y){return (range(a,c,x)&&range(b,d,y));}template<typename T>void rev(vector<T> &v){reverse(v.begin(),v.end());}void revs(string &s) {reverse(s.begin(),s.end());}template<typename T>void sor(vector<T> &v, int f=0){sort(v.begin(),v.end());if(f!=0) rev(v);}template<typename T>bool chmin(T &a,const T &b){if(a>b){a=b;return true;}return false;}template<typename T>bool chmax(T &a,const T &b){if(a<b){a=b;return true;}return false;}template<typename T>void uniq(vector<T> &v){sor(v);v.erase(unique(v.begin(),v.end()),v.end());}template<typename T1, typename T2>void print(pair<T1,T2> a);template<typename T>void print(vector<T> v);template<typename T>void print(vector<vector<T>> v);void print(){ putchar(' '); }void print(bool a){ printf("%d", a); }void print(int a){ printf("%d", a); }void print(long a){ printf("%ld", a); }void print(long long a){ printf("%lld", a); }void print(char a){ printf("%c", a); }void print(char a[]){ printf("%s", a); }void print(const char a[]){ printf("%s", a); }void print(long double a){ printf("%.15Lf", a); }void print(const string& a){ for(auto&& i : a) print(i); }void print(unsigned int a){ printf("%u", a); }void print(unsigned long long a) { printf("%llu", a); }template<class T> void print(const T& a){ cout << a; }int out(){ putchar('\n'); return 0; }template<class T> int out(const T& t){ print(t); putchar('\n'); return 0; }template<class Head, class... Tail> int out(const Head& head, const Tail&... tail){ print(head); putchar(' '); out(tail...); return 0; }template<typename T1,typename T2>void print(pair<T1,T2> a){print(a.first);print(),print(a.second);}template<typename T>void print(vector<T> v){for(auto ite=v.begin();ite!=v.end();){print(*ite);if(++ite!=v.end())print();}}template<typename T>void print(vector<vector<T>> v){for(auto ite=v.begin();ite!=v.end();){print(*ite);if(++ite!=v.end())out();}}void yes(){out("Yes");}void no (){out("No");}void yn (bool t){if(t)yes();else no();}void fast_io(){cin.tie(0); ios::sync_with_stdio(0); cout<<fixed<<setprecision(20);}void o(){out("!?");}namespace noya2{const int INF = 1001001007;const long long mod1 = 998244353;const long long mod2 = 1000000007;const long long inf = 2e18;const long double pi = 3.14159265358979323;const long double eps = 1e-7;const vector<int> dx = {0,1,0,-1,1,1,-1,-1};const vector<int> dy = {1,0,-1,0,1,-1,-1,1};const string ALP = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";const string alp = "abcdefghijklmnopqrstuvwxyz";const string NUM = "0123456789";} // namespace noya2using namespace noya2;//using mint = modint998244353;using mint = modint1000000007;//using mint = modint;void out(mint a){out(a.val());}void out(vector<mint> a){vector<ll> b(a.size()); rep(i,a.size()) b[i] = a[i].val(); out(b);}void out(vector<vector<mint>> a){for (auto v : a) out(v);}istream &operator>>(istream &is,vector<mint> &v){for(auto &e:v){ll _x;is>>_x;e=_x;}return is;}vector<mint> fact1e7 ={1 ,682498929 ,491101308 ,76479948 ,723816384 ,67347853 ,27368307 ,625544428 ,199888908 ,888050723 ,927880474 ,281863274 ,661224977 ,623534362 ,970055531 ,261384175 ,195888993 ,66404266 ,547665832 ,109838563 ,933245637 ,724691727 ,368925948 ,268838846 ,136026497 ,112390913 ,135498044 ,217544623 ,419363534 ,500780548 ,668123525 ,128487469 ,30977140 ,522049725 ,309058615 ,386027524 ,189239124 ,148528617 ,940567523 ,917084264 ,429277690 ,996164327 ,358655417 ,568392357 ,780072518 ,462639908 ,275105629 ,909210595 ,99199382 ,703397904 ,733333339 ,97830135 ,608823837 ,256141983 ,141827977 ,696628828 ,637939935 ,811575797 ,848924691 ,131772368 ,724464507 ,272814771 ,326159309 ,456152084 ,903466878 ,92255682 ,769795511 ,373745190 ,606241871 ,825871994 ,957939114 ,435887178 ,852304035 ,663307737 ,375297772 ,217598709 ,624148346 ,671734977 ,624500515 ,748510389 ,203191898 ,423951674 ,629786193 ,672850561 ,814362881 ,823845496 ,116667533 ,256473217 ,627655552 ,245795606 ,586445753 ,172114298 ,193781724 ,778983779 ,83868974 ,315103615 ,965785236 ,492741665 ,377329025 ,847549272 ,698611116 ,};void solve(){ll n; cin >> n;if (n >= (ll)mint::mod()){out(0);return ;}ll b = 1e7;mint ans = fact1e7[n/b];for (ll a = n/b*b+1; a <= n; a++) ans *= a;out(ans.val());}int main(){fast_io();int t = 1; //cin >> t;while(t--) solve();}