結果
問題 | No.251 大きな桁の復習問題(1) |
ユーザー |
![]() |
提出日時 | 2020-05-25 02:10:32 |
言語 | C++11 (gcc 13.3.0) |
結果 |
AC
|
実行時間 | 7 ms / 5,000 ms |
コード長 | 2,394 bytes |
コンパイル時間 | 1,476 ms |
コンパイル使用メモリ | 160,040 KB |
実行使用メモリ | 6,820 KB |
最終ジャッジ日時 | 2024-10-12 18:31:24 |
合計ジャッジ時間 | 2,292 ms |
ジャッジサーバーID (参考情報) |
judge5 / judge2 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 21 |
ソースコード
/*** @FileName a.cpp* @Author kanpurin* @Created 2020.05.25 02:10:27**/#include "bits/stdc++.h"using namespace std;typedef long long ll;ll f(string s, int mod) {ll res = 0;for (int i = 0; i < s.size(); i++) {res *= 10;res += s[i]-'0';res %= mod;}return res;}const int MOD = 129402307;struct mint {private:long long x;public:mint(long long x = 0) : x((MOD + x) % MOD) {}mint(std::string& s) {long long z = 0;for (int i = 0; i < s.size(); i++) {z *= 10;z += s[i] - '0';z %= MOD;}this->x = z;}mint& operator+=(const mint& a) {if ((x += a.x) >= MOD) x -= MOD;return *this;}mint& operator-=(const mint& a) {if ((x += MOD - a.x) >= MOD) x -= MOD;return *this;}mint& operator*=(const mint& a) {(x *= a.x) %= MOD;return *this;}mint& operator/=(const mint& a) {long long n = MOD - 2;mint u = 1, b = a;while (n > 0) {if (n & 1) {u *= b;}b *= b;n >>= 1;}return *this *= u;}mint operator+(const mint& a) const {mint res(*this);return res += a;}mint operator-(const mint& a) const {mint res(*this);return res -= a;}mint operator*(const mint& a) const {mint res(*this);return res *= a;}mint operator/(const mint& a) const {mint res(*this);return res /= a;}friend std::ostream& operator<<(std::ostream& os, const mint& n) {return os << n.x;}bool operator==(const mint& a) const {return this->x == a.x;}};// powtemplate < typename T, typename U >T pow(T k, U n, T unity = 1) {while (n > 0) {if (n & 1) {unity *= k;}k *= k;n >>= 1;}return unity;}int main() {string s, t;cin >> s >> t;if (s == "0") {cout << 0 << endl;return 0;}else if (t == "0") {cout << 1 << endl;return 0;}mint ans = f(s, MOD);if (ans == 0) {cout << 0 << endl;return 0;}ans = pow(ans, f(t, MOD - 1));cout << ans << endl;return 0;}