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;
}
相关文章
|
12月前
|
索引
洛谷P1231 教辅的组成
洛谷P1231 教辅的组成
|
12月前
蓝桥 和为T (状压)
蓝桥 和为T (状压)
|
12月前
|
人工智能
蓝桥 包子凑数 (筛数)
蓝桥 包子凑数 (筛数)
luogu P1993 小K的农场(差分约束系统)
luogu P1993 小K的农场(差分约束系统)
58 0
luogu P1516 青蛙的约会
luogu P1516 青蛙的约会
65 0
洛谷1102 A-B 暴力法
判断第 i 个数和 i 之后的每一个数的绝对值是否等于目标结果