Sramoc(k,m)表示用数字0到k-1组成的自然数中能被m整除的最小数,求这个数。

思路:
整除满足分配律:a+b%m=(a%m+b%m)%m   a*b%m=(a%m*b%m)%m;
所以对于两个余数一样的数字,之后的所有情况都是一样的,我们只需要考虑余数不一样的数字,也就是说我们最多只需要考虑m个数就行了

#include <bits/stdc++.h>
using namespace std;
int k, m;
int vis[10010];
struct ty {
    string s;
    int yu;
};
void bfs(string s) {
    queue<ty> q;
    q.push({"1", 1});
    vis[1] = 1;
    while (!q.empty()) {
        ty tmp = q.front();
        q.pop();
        if (tmp.yu == 0) {cout<<tmp.s;return ;}
        for (int i = 0; i < k; i++) {
            if (!vis[(tmp.yu * 10 + i) % m]) {
                ty cur = tmp;
                cur.s += i + '0';
                cur.yu = (tmp.yu * 10 + i) % m;
                q.push(cur);
                vis[cur.yu]=1;
            }
        }
    }
}
int main() {
    scanf("%d%d", &k, &m);
    bfs("1");
    return 0;
}