結果

問題 No.502 階乗を計算するだけ
ユーザー vjudge1
提出日時 2025-02-22 18:23:15
言語 C++17
(gcc 13.3.0 + boost 1.87.0)
結果
TLE  
実行時間 -
コード長 2,603 bytes
コンパイル時間 2,130 ms
コンパイル使用メモリ 192,896 KB
実行使用メモリ 13,764 KB
最終ジャッジ日時 2025-02-22 18:23:21
合計ジャッジ時間 5,540 ms
ジャッジサーバーID
(参考情報)
judge3 / judge1
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
other AC * 32 TLE * 1 -- * 19
権限があれば一括ダウンロードができます

ソースコード

diff #

#include<bits/stdc++.h>
#define int long long
using namespace std;

inline int read(){
	int x=0,f=1;
	char ch=getchar();
	while(ch<'0'||ch>'9'){
		if(ch=='-') f=-1;
		ch=getchar();
	}
	while(ch>='0'&&ch<='9'){
		x=x*10+ch-48;
		ch=getchar();
	}
	return x*f;
}

inline void print(int x){
	static int s[55],t=0;
	do s[++t]=x%10,x/=10;while(x);
	while(t) putchar(s[t--] + '0');
}

int n;
const int MOD=1e9+7;

int ksm(int a,int b){
	int res=1;
	while(b){
		if(b&1){
			res=res*a%MOD;
		}
		a=a*a%MOD;
		b>>=1;
	}
	return res;
}

int fm(int x){
	return ksm(x,MOD-2);
}

int solve(int n){
	if(n>=MOD){
		return 0;
	}
	if(n<=1e7){
		int ans=1;
		for(int i=1;i<=n;i++){
			ans=(ans*i)%MOD;
		}
		return ans;
	}
	long long blockSize=31623;
    long long blockFact=1;
    for(long long i=1;i<=blockSize;i++){
        blockFact=blockFact*i%MOD;
    }
    long long res=1;
    long long numBlocks=n/blockSize;
    for(long long i=0;i<numBlocks;i++){
        res=res*ksm(blockFact,i+1)%MOD;
        for(long long j=i*blockSize+1;j<=(i+1)*blockSize;j++){
            res=res*j%MOD;
        }
    }
    for(long long i=numBlocks*blockSize+1;i<=n;i++){
        res=res*i%MOD;
    }
    return res;
}

signed main(){
//	freopen("factorial.in","r",stdin);
//	freopen("factorial.out","w",stdout);
	n=read();
	cout<<solve(n)<<"\n";
	return 0;
}

/*??
??????
???????????????????????
????????????????????
???????????5???????????????????????????????????????????????????????????????????????????????????????????????24?????????????????????????????????????????????????????????????????????
????????????????????
???????????????????????????????????????????????????????????????????????????????????????????...?????????????
?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????...????????????????????????????????
??????????????
????????????
?????????????
?????????????
?????????
??? ? ?? ? ???????
???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
?????????????????????????????????????????????????????????????????????????????????????????????????????????????????
???????????????????????????
?????????????????????
????????????????????
?????????????
????????????????
????????????????????????
?????????????????????????
??????
??????????????
????????????
???????????????????
????????????
??????
?????
???????????
??????????????
?????
?????
?????
??????
???????????????
??????????
??????????????
????????????
????*/
0