QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#742872#9705. Multiplyucup-team004AC ✓106ms5072kbC++233.4kb2024-11-13 17:32:422024-11-13 17:32:42

Judging History

This is the latest submission verdict.

  • [2024-11-13 17:32:42]
  • Judged
  • Verdict: AC
  • Time: 106ms
  • Memory: 5072kb
  • [2024-11-13 17:32:42]
  • Submitted

answer

#include <bits/stdc++.h>

using i64 = long long;
using u64 = unsigned long long;
using u32 = unsigned;
using u128 = unsigned __int128;
i64 mul(i64 a, i64 b, i64 m) {
    i64 c = a * b - i64(1.0L * a * b / m) * m;
    c %= m;
    if (c < 0) {
        c += m;
    }
    return c;
}
i64 power(i64 a, i64 b, i64 m) {
    i64 res = 1 % m;
    for (; b; b >>= 1, a = mul(a, a, m))
        if (b & 1)
            res = mul(res, a, m);
    return res;
}
bool isprime(i64 n) {
    if (n < 2)
        return false;
    static constexpr int A[] = {2, 3, 5, 7, 11, 13, 17, 19, 23};
    int s = __builtin_ctzll(n - 1);
    i64 d = (n - 1) >> s;
    for (auto a : A) {
        if (a == n)
            return true;
        i64 x = power(a, d, n);
        if (x == 1 || x == n - 1)
            continue;
        bool ok = false;
        for (int i = 0; i < s - 1; ++i) {
            x = mul(x, x, n);
            if (x == n - 1) {
                ok = true;
                break;
            }
        }
        if (!ok)
            return false;
    }
    return true;
}
std::vector<std::pair<i64, int>> factorize(i64 n) {
    std::vector<i64> p;
    std::function<void(i64)> f = [&](i64 n) {
        if (n <= 10000) {
            for (int i = 2; i * i <= n; ++i)
                for (; n % i == 0; n /= i)
                    p.push_back(i);
            if (n > 1)
                p.push_back(n);
            return;
        }
        if (isprime(n)) {
            p.push_back(n);
            return;
        }
        auto g = [&](i64 x) {
            return (mul(x, x, n) + 1) % n;
        };
        i64 x0 = 2;
        while (true) {
            i64 x = x0;
            i64 y = x0;
            i64 d = 1;
            i64 power = 1, lam = 0;
            i64 v = 1;
            while (d == 1) {
                y = g(y);
                ++lam;
                v = mul(v, std::abs(x - y), n);
                if (lam % 127 == 0) {
                    d = std::gcd(v, n);
                    v = 1;
                }
                if (power == lam) {
                    x = y;
                    power *= 2;
                    lam = 0;
                    d = std::gcd(v, n);
                    v = 1;
                }
            }
            if (d != n) {
                f(d);
                f(n / d);
                return;
            }
            ++x0;
        }
    };
    f(n);
    std::sort(p.begin(), p.end());
    std::vector<std::pair<i64, int>> ret;
    for (int l = 0, r = 0; l < p.size(); l = r) {
        while (r < p.size() && p[l] == p[r]) {
            r++;
        }
        ret.emplace_back(p[l], r - l);
    }
    return ret;
}
i64 get(i64 n, i64 p) {
    i64 ans = 0;
    for (n /= p; n; n /= p) {
        ans += n;
    }
    return ans;
}
void solve() {
    int N;
    i64 X, Y;
    std::cin >> N >> X >> Y;
    
    std::vector<i64> a(N);
    for (int i = 0; i < N; i++) {
        std::cin >> a[i];
    }
    
    auto ps = factorize(X);
    i64 ans = 4E18;
    for (auto [p, e] : ps) {
        i64 res = get(Y, p);
        for (int i = 0; i < N; i++) {
            res -= get(a[i], p);
        }
        ans = std::min(ans, res / e);
    }
    std::cout << ans << "\n";
}

int main() {
    std::ios::sync_with_stdio(false);
    std::cin.tie(nullptr);
    
    int t;
    std::cin >> t;
    
    while (t--) {
        solve();
    }
    
    return 0;
}

详细

Test #1:

score: 100
Accepted
time: 0ms
memory: 3508kb

input:

2
3 10 10
2 3 4
2 2 10
1 1

output:

2
8

result:

ok 2 number(s): "2 8"

Test #2:

score: 0
Accepted
time: 2ms
memory: 3584kb

input:

8
929 98210021061137 164832982985885580
43576998167336 157303878397705 212661169553039 169068044677212 17733912750082 101059786177542 56528418806042 170741049344189 128297164019222 208810463591190 96264177952672 70816863413347 116985928070432 56330014332760 10006522486360 110959002803542 15298525649...

output:

1059
95837140
1761303730724
3810060773695
8961243000749
8657430203778550
2603387692898890
569502267311933

result:

ok 8 numbers

Test #3:

score: 0
Accepted
time: 97ms
memory: 5072kb

input:

8
92894 80454414905270281 520643152573491735
2064229122797 4223622787947 1054260245418 4094316313084 3929142530824 6452342289094 3762455615113 3157146960681 5603173442583 1875814573143 1801348242678 2409547278342 6854531398370 1240913563145 1848446319539 1493011800303 5389461335879 7286083232997 579...

output:

6
114168802
81596535601
11028882122096
100316204821427
4718268084920428
394167331265621
539500856199383

result:

ok 8 numbers

Test #4:

score: 0
Accepted
time: 106ms
memory: 5000kb

input:

8
92894 8280090210874177 543856067505017676
7628166265475 4448095856140 3732480525951 6624251584927 2217648228673 2129611741353 2848644172912 8103647146535 1467047865398 2185292600211 1765086497170 6371594269098 8613841584311 6848101874651 718312212561 4093427071182 2289683844966 6915866934586 51966...

output:

65
1246786758
333319010645
13129729242598
84397513456572
1419008292818811
145866895461700
594315405335288

result:

ok 8 numbers

Test #5:

score: 0
Accepted
time: 99ms
memory: 4804kb

input:

8
92894 98210021061137 164832982985885580
437808801937 1580398501813 2136561393792 1698590570197 178168838012 1015326106916 567928960914 1715398889850 1288974230710 2097874172186 967145654868 711481916793 1175332657008 565935634477 100533395596 1114781424652 1537010227806 201374141170 2002549530277 ...

output:

1678
15138363549
3851961323533
9546266194484
65456023237176
50284070499384881
2136489879131768
343921703953617

result:

ok 8 numbers

Test #6:

score: 0
Accepted
time: 0ms
memory: 3732kb

input:

8
929 904648320997198759 857077283552821319
576128640757999 1022489209332927 342306048548590 328717138574533 439703699384584 1250841949052893 226446805904869 337311781446902 272450687310201 983490180331727 1329593231427121 1057041717229744 110875391163525 631842700541257 353425137200360 106750162246...

output:

0
14963454
29504132475
203878226275
8778367031870
15079682243266455
149351201237842
2430883872230178

result:

ok 8 numbers

Test #7:

score: 0
Accepted
time: 86ms
memory: 4800kb

input:

8
92894 904648320997198759 857077283552821319
5796497585331 10287383430483 3443981158080 3307261546850 4423910306892 12584867031801 2278307777449 3393733253885 2741158205233 9895009642558 13377192887408 10635020251022 1115530268804 6357043250803 3555851608183 10740258578761 8070377462103 13134968899...

output:

0
21583598
4114016689
5953125168816
9610340743247
133189637386353298
124668826875053
21617048982826

result:

ok 8 numbers