結果
問題 |
No.502 階乗を計算するだけ
|
ユーザー |
![]() |
提出日時 | 2025-02-22 21:48:13 |
言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
結果 |
TLE
|
実行時間 | - |
コード長 | 1,233 bytes |
コンパイル時間 | 1,684 ms |
コンパイル使用メモリ | 160,624 KB |
実行使用メモリ | 13,632 KB |
最終ジャッジ日時 | 2025-02-22 21:48:28 |
合計ジャッジ時間 | 14,012 ms |
ジャッジサーバーID (参考情報) |
judge1 / judge3 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | AC * 37 TLE * 6 -- * 9 |
ソースコード
#include<bits/stdc++.h> int main() { //freopen("factorial.in","r",stdin); //freopen("factorial.out","w",stdout); std::ios::sync_with_stdio(false),std::cin.tie(nullptr); long long n,i,ans1=1,ans2=1,ans3=1,ans4=1,ans5=1,ans6=1,ans7=1,ans8=1; const int Mod=1e9+7; const __int128 brt=((__int128)1<<64)/Mod; std::cin>>n; for(i=1;i+8<=n;i+=8) { ans1*=i,ans2*=(i+1),ans3*=(i+2),ans4*=(i+3),ans5*=(i+4),ans6*=(i+5),ans7*=(i+6),ans8*=(i+7); ans1=ans1-Mod*(brt*ans1>>64); ans2=ans2-Mod*(brt*ans2>>64); ans3=ans3-Mod*(brt*ans3>>64); ans4=ans4-Mod*(brt*ans4>>64); ans5=ans5-Mod*(brt*ans5>>64); ans6=ans6-Mod*(brt*ans6>>64); ans7=ans7-Mod*(brt*ans7>>64); ans8=ans8-Mod*(brt*ans8>>64); if(ans1>=Mod) ans1-=Mod; if(ans2>=Mod) ans2-=Mod; if(ans3>=Mod) ans3-=Mod; if(ans4>=Mod) ans4-=Mod; if(ans5>=Mod) ans5-=Mod; if(ans6>=Mod) ans6-=Mod; if(ans7>=Mod) ans7-=Mod; if(ans8>=Mod) ans8-=Mod; } ans1=ans1*ans2%Mod; ans3=ans3*ans4%Mod; ans5=ans5*ans6%Mod; ans7=ans7*ans8%Mod; ans1=ans1*ans3%Mod; ans5=ans5*ans7%Mod; long long ans=ans1*ans5%Mod; for(;i<=n;i++) ans=ans*i%Mod; std::cout<<ans; return 0; }