鏈接:P6392 中意 - 洛谷
題目:
思路:
數論這一塊
題目讓我們求這個結果對 MOD 取模,那么我們肯定是不像看到這個除法,所以考慮如何消除這個除法
我們可以想到,向上取整就是加上一個數,假設其為 x,那么原式就可以變成
,此時就能將 25 化簡掉。即變成?
那么問題就變成了如何求這個 x,很顯然,這個 x 就是 25 減去??對 25 取模的結果
那么如何求得這個結果呢?
所以我們可以拆開來求,具體步驟寫代碼中了
然后求得 x 后按照上面的公式計算即可,特別注意要使用快速冪加速運算?
代碼:
#include <iostream>
#include <algorithm>
#include<cstring>
#include <iomanip>
#include<cctype>
#include<string>
#include <set>
#include <vector>
#include <cmath>
#include <queue>
#include <unordered_set>
#include <map>
#include <unordered_map>
#include <stack>
#include <utility>
#include <array>
#include <tuple>
using namespace std;
#define int long long
#define yes cout << "YES" << endl
#define no cout << "NO" << endl
const int MOD = 998344353;int qp(int a,int b,int mod)
{int res = 1;while (b){if (b & 1) res = res * a % mod;a = a * a % mod;b >>= 1;}return res % MOD;
}int change(const string & s)
{int ans = 0;for (auto & c : s){ans *= 10;ans += c - '0';ans %= MOD;}return ans;
}void solve()
{string s; int a;cin >> s >> a;int b = change(s);int mowei = s.back() - '0';if (s.size() > 1){mowei += (s[s.size() - 2] - '0') * 10;}mowei *= qp(2, a + 2, 25);mowei %= 25;mowei = (25 - mowei) % 25;mowei *= 4;int newa = qp(2, a + 2, MOD);int first = b * newa % MOD * 4 % MOD;int second = mowei % MOD;cout << (first + second) % MOD << endl;
}
signed main()
{//cin.tie(0)->sync_with_stdio(false);int t = 1;//cin >> t;while (t--){solve();}return 0;
}