luogu P4884多少个1(BSGS)

简介: luogu P4884多少个1(BSGS)

给定整数K和质数m,求最小的正整数N,使得 11111⋯1(N个1) mod m≡K(modm)

说人话:就是 111…1111 mod m =K


思路:我们可以给左右两边同乘上99再加上11,因为膜运算的性质,因此这样做这个同余方程还是成立的。

然后问题就瞬间转化为:

给定整数K和质数m,求最小的正整数N,使得10^N ≡K(modm) (BSGS模板题)

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
ll p, a, b;
ll qmul(ll a, ll b, ll mod) {
    ll ans = 0;
    while (b) {
        if (b & 1) {
            ans = (ans + a) % mod;
        }
        a = (a + a) % mod;
        b >>= 1;
    }
    return ans % mod;
}
int main() {
    cin >> b >> p;
    a = 10; b = b * 9 + 1; b %= p;
    ll n = sqrt(p) + 1;
    map<ll,ll> mp;
    ll ans = b%p;
    for (int i = 0; i <= n; i++) {
        mp[ans] = i;
        ans = qmul(ans, a, p);
    }
    ans = 1;
    for (int i = 1; i <= n; i++) ans = qmul(ans, a, p);
    ll ret = 1;
    for (int i = 1; i <= n; i++) {
        ret = qmul(ret, ans, p);
        if (mp[ret] != 0) {
            cout << (ll)i * n - mp[ret] << endl;
            return 0;
        }
    }
    return 0;
}
相关文章
|
1月前
lanqiao oj 1121 蓝桥公园(floyd)
lanqiao oj 1121 蓝桥公园(floyd)
41 0
|
1月前
lanqiao OJ 健身
lanqiao OJ 健身
12 0
|
1月前
lanqiao oj 1122 蓝桥王国
lanqiao oj 1122 蓝桥王国
16 0
|
1月前
lanqiao oj 1135 蓝桥幼儿园(并查集)
lanqiao oj 1135 蓝桥幼儿园(并查集)
26 0
luogu P1993 小K的农场(差分约束系统)
luogu P1993 小K的农场(差分约束系统)
67 0
luogu P1516 青蛙的约会
luogu P1516 青蛙的约会
71 0
luogu P2391 白雪皑皑 (并查集 思维)
luogu P2391 白雪皑皑 (并查集 思维)
54 0
luogu P2391 白雪皑皑 (并查集 思维)