题目大意 多组数据,每组数据给定两个整数 \(m,n\),输出使 \(n\%m^k=0\) 的最大的 \(k\)。如果 \(k=0\) 则输出Impossible to divide。

分析 计数水题。将 \(m\) 质因数分解后在 \(1-n\) 之间试除 \(m\) 的每个素因子,统计总个数即可。

#include<bits/stdc++.h>
using namespace std;

int T, t, n, m, ans;
int tot, p[20];
map<int, int> m1, m2;

int main()
{
    scanf("%d", &T), t = 1;
    while(t <= T) {
        ans = 0x3f3f3f3f, tot = 0;
        m1.clear(), m2.clear();

        scanf("%d%d", &m, &n);
        for(int i = 2; i <= m; ++i) {
            if(m % i) continue;

            p[++tot] = i;
            while(!(m % i)) ++m1[i], m /= i;
        }

        for(int i = 1; i <= n; ++i) {
            int tmp = i;
            for(int j = 1; j <= tot; ++j)
                while(!(tmp % p[j])) ++m2[p[j]], tmp /= p[j];
        }

        for(int i = 1; i <= tot; ++i)
            ans = min(ans, m2[p[i]] / m1[p[i]]);

        printf("Case %d:\n", t++);
        if(ans) printf("%d\n", ans);
        else puts("Impossible to divide");
    }
}
01-12 10:08