(large{题目链接})
(\)
(Large extbf{Soluiton: } large{题意可化为求最小的n满足sum ^{n-1}limits_{i=0}10^{i}equiv kleft(mod m
ight),可转化为dfrac {10^{n}-1}{9}equiv kleft(mod m
ight),观察这个式子,用 ext{BSGS}求即可})
(\)
(Large extbf{Summary: } large{1.龟速乘可以防止爆long long。\2.膜一下tlx,比我快,空间还比 我小,orz。})
(\)
(Large extbf{Code:})
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef long double ld;
typedef unsigned long long ull;
ll k, m;
map <ll, ll> h;
inline ll read() {
ll x = 0;
char ch = getchar();
while (!isdigit(ch)) ch = getchar();
while (isdigit(ch)) x = x * 10 + ch - '0', ch = getchar();
return x;
}
inline ll mul(ll x, ll y, ll p) {
ll z = (ld)x / p * y;
ll ret = (ull)x * y - (ull)z * p;
return (ret + p) % p;
}
int main() {
k = read(), m = read();
k = (mul(9, k, m) + 1) % m;
int t = ceil(sqrt(m)); ll cur = 1;
h[k % m] = 0;
for (int i = 1; i <= t; ++i) cur = mul(cur, 10, m), h[mul(cur, k, m)] = i;
ll ans = 1;
for (int i = 1; i <= t; ++i) {
ans = mul(ans, cur, m);
if (h[ans]) { printf("%lld
", ((1ll * i * t - h[ans]) % m + m) % m); return 0; }
}
}