萌新刚学OI,求助各位大佬,
查看原帖
萌新刚学OI,求助各位大佬,
261773
youwike楼主2020/7/24 11:36
#include <cstdio>
#include <cstring>
#include <map>
#include <cmath>
#define int __int128_t

using namespace std;

map<int, int> vis;
int a, b, m;
int mod;


inline int read() {
    int X=0,w=1; char c=getchar();
    while (c<'0'||c>'9') { if (c=='-') w=-1; c=getchar(); }
    while (c>='0'&&c<='9') X=(X<<3)+(X<<1)+c-'0',c=getchar();
    return X*w;
}

inline void write(int x) {
    int sta[100],top=0;
    while (x) sta[++top]=x%10,x/=10;
    while (top) putchar(sta[top--]+'0');
}

int mul(int a, int b)
{
    return a * b % mod;
}

int qpow(int a, int b)
{
    int res = 1;
    while (b)
    {
        if (b & 1) res = mul(res, a) % mod;
        a = mul(a, a) % mod;
        b >>= 1;
    }
    return res;
}

signed main()
{
    b = read(), mod = read();
    m = sqrt((long long) mod) + 1;
    b = mul(b, 9) + 1;
    b %= mod;
    a = 10;
    for (int i = 0; i < m; ++ i)
    {
        int now = b * qpow(a, i) % mod;
        vis[now] = i;
    }
    a = qpow(a, m);
    //cout << m;
    for (int i = 0; i < m; ++ i)
    {
        int now = qpow(a, i) % mod;
        if (vis[now]) {write(((mul(i, m) - vis[now]) % mod + mod) % mod);return 0;}
    }
    return 0;
}```
最后4个点wa了
2020/7/24 11:36
加载中...