QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#768862#9705. MultiplyIllusionaryDominance#AC ✓113ms4832kbC++203.9kb2024-11-21 14:55:332024-11-21 14:55:41

Judging History

This is the latest submission verdict.

  • [2024-11-21 14:55:41]
  • Judged
  • Verdict: AC
  • Time: 113ms
  • Memory: 4832kb
  • [2024-11-21 14:55:33]
  • Submitted

answer

#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>

using namespace __gnu_pbds;
using namespace std;
using ll = long long;
using u64 = unsigned long long;

namespace PR{
    ll fac[1000000], cnt;
    gp_hash_table <ll, bool> h;
    
    ll times(const ll &a, const ll &b, const ll &p) {
        ll res = a * b - (ll)((long double)a / p * b + 0.5) * p;
        return res < 0 ? res + p : res;
    }
    
    ll power(ll a, ll n, ll p) {
        ll ans = 1;
        a %= p;
        while (n) {
            if (n & 1) ans = times(ans, a, p);
            a = times(a, a, p); n >>= 1;
        }
        return ans;
    }
    
    ll gcd(ll a, ll b) {
        while (b) {
            ll t = b;
            b = a % b;
            a = t;
        }
        return a;
    }
    
    bool check(const ll &x) {
        if (x < 2) return false;
        for (int i = 2; i * i <= x; i ++)
            if (x % i == 0) return false;
        return true;
    }
    
    bool miller_rabin(const ll &n) {
        if (n < 100) return check(n);
        if (h.find(n) != h.end()) return h[n];
        if ((~ n & 1) || n % 3 == 0 || n % 5 == 0 || n % 7 == 0 || n % 11 == 0 || n % 13 == 0 || n % 17 == 0 || n % 19 == 0 || n % 23 == 0 || n % 29 == 0) return false;
        ll b = __builtin_ctzll(n - 1), x = (n - 1) >> b;
        static int prime[12] = {2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37};
        for (int i = 0; i < 12; i ++) {
            ll cur = power(prime[i], x, n), nxt;
            for (int j = 1; j <= b && cur != 1; j ++) {
                nxt = times(cur, cur, n);
                if (nxt == 1 && cur != n - 1) {
                    h[n] = 0;
                    return false;
                }
                cur = nxt;
            }
            if (cur != 1) {
                h[n] = 0;
                return false;
            }
        }
        h[n] = 1;
        return true;
    }
    
    ll add(const ll &a, const ll &b, const ll &p) {
        u64 t = (u64)a + (u64)b;
        t -= t < (u64)p ? 0 : p;
        return t;
    }
    
    ll pollard_rho(const ll &n) {
        ll c = (rand() << 15 | rand()) % n + 1, a1 = 0, a2;
        a1 = add(times(a1, a1, n), c, n);
        a2 = add(times(a1, a1, n), c, n);
        while (a1 != a2) {
            ll d = gcd(abs(a1 - a2), n);
            if (d > 1) return d;
            a1 = add(times(a1, a1, n), c, n);
            a2 = add(times(a2, a2, n), c, n);
            a2 = add(times(a2, a2, n), c, n);
        }
        return n;
    }
    
    void Do(ll n) {
        if (n < 2) return ;
        if (miller_rabin(n)) {
            fac[++ cnt] = n;
            return ;
        }
        ll s = sqrt(n);
        if (s * s == n) {
            Do(s); Do(s); return ;
        }
        s = pollard_rho(n);
        while (s == 1 || s == n) s = pollard_rho(n);
        Do(s); Do(n / s);
    }
    
    vector<long long> solve(const ll &n) {
        cnt = 0;
        Do(n);
        sort(fac + 1, fac + cnt + 1);

        vector<long long> re;
        for (int i = 1; i <= cnt; ++ i) re.push_back(fac[i]);
        return re;
    }
};


void solve(){
    int N;
    long long X, Y;
    cin >> N >> X >> Y;

    vector<long long>fac = PR::solve(X);
    vector<long long> A(N + 1);
    for (int i = 1; i <= N; ++ i) cin >> A[i];

    long long ans = 1e18;
    for (int i = 0; i < fac.size(); ++ i){
        long long tot = 1;
        while(i + 1 < fac.size() && fac[i] == fac[i + 1]) ++ i, ++ tot;

        long long sumY = 0, sumA = 0;
        for (__int128 now = fac[i]; now <= Y; now *= fac[i]){
            sumY += Y / now;
            for (int j = 1; j <= N; ++ j) sumA += A[j] / now;
        }
        ans = min(ans, (sumY - sumA) / tot);
    }
    cout << ans << "\n";
}

int main(){
    ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
    int T; cin >> T;
    while(T --) solve();
}

详细

Test #1:

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

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: 3628kb

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: 107ms
memory: 4500kb

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: 113ms
memory: 4832kb

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: 101ms
memory: 4316kb

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: 6ms
memory: 3632kb

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: 90ms
memory: 4540kb

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