QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#721856#9705. Multiplytarjen#AC ✓111ms5292kbC++202.6kb2024-11-07 17:01:202024-11-07 17:01:20

Judging History

This is the latest submission verdict.

  • [2024-11-07 17:01:20]
  • Judged
  • Verdict: AC
  • Time: 111ms
  • Memory: 5292kb
  • [2024-11-07 17:01:20]
  • Submitted

answer

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
map<ll, bool>P;
mt19937_64 rnd(time(0));
namespace Pollard_Rho
{
#define ldb long double
ll mul(ll x, ll y, ll mod)
{
	return ((x * y - (ll)((ldb)x / mod * y) * mod) + mod) % mod;
}
ll gcd(ll a, ll b)
{
	return (b == 0 ? a : gcd(b, a % b));
}
ll ksm(ll a, ll b, ll mod)
{
	ll ans = 1; a %= mod;
	while (b) {if (b & 1)ans = mul(ans, a, mod); b >>= 1; a = mul(a, a, mod);}
	return ans;
}
int pr[19] = {2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37,41,43,47,53,59,61,67};
bool Miller_Rabin(ll n)
{
	if (n == 2 || n == 3)return 1;
	if (n % 2 == 0 || n == 1)return 0;
	ll d = n - 1;
	int s = 0;
	while (d % 2 == 0)s ++, d >>= 1;
	for (int i = 0; i <= 18; i ++)
	{
		if (pr[i] >= n)break;
		ll a = pr[i];
		ll x = ksm(a, d, n);
		ll y = 0;
		for (int j = 0; j <= s - 1; j ++)
		{
			y = mul(x, x, n);
			if (y == 1 && x != 1 && x != (n - 1))return 0;
			x = y;
		}
		if (y != 1)return 0;
	}
	return 1;
}
ll Pollard_Rho(ll n)
{
	ll now, pre, g;
	while (true)
	{
		now = pre = rnd() % (n - 1) + 1;
		g = 1;
		ll c = rnd() % (n - 1) + 1;
		for (int i = 1, fst = 1 ;; i ++)
		{
			now = (mul(now, now, n) + c) % n;
			g = mul(g, abs(now - pre), n);
			if (now == pre || !g)break;
			if (i == fst)
			{
				g = gcd(g, n);
				if (g > 1)return g;
				if (i == fst)pre = now, fst <<= 1;
			}
		}
	}
}
void Find(ll n)
{
	if (n == 1)return ;
	if (Miller_Rabin(n))
	{
		P[n] = 1;
		return ;
	}
	ll p = Pollard_Rho(n);
	if(n%p!=0)return;
    int c = 0;
	while (!(n % p))
	{
		n /= p, c ++;
	}
    Find(p);
	Find(n);
}
}
void getp(ll x,set<ll> &s){
    Pollard_Rho :: Find(x);
    for (auto [x, _] : P)s.insert(x);
    P.clear();
}
ll solve()
{
    ll n,X,Y;cin>>n>>X>>Y;
    ll ans=6e18;
    vector<ll>a(n);
    for(int i=0;i<n;i++)cin>>a[i];
    auto cal = [&](ll x,ll y){// cal x! y
        ll ans=0;
        while(x>0){
            // cout<<"x="<<x<<" y="<<y<<endl;
            ans+=x/y;x/=y;
        }
        return ans;
    };
    auto calans = [&](ll x){
        ll sum=0;
        for(auto &it:a)sum+=cal(it,x);
        ll ysum=cal(Y,x);
        // cout<<"x="<<x<<" sum="<<sum<<" ysum="<<ysum<<endl;
        ll t=0;
        {
            ll G=X;
            while(G%x==0)t++,G/=x;
        }
        if(t==0)return (ll)6e18;
        return (ysum-sum)/t;
    };
    set<ll>s;
    getp(X,s);
    for(auto it:s){ans=min(ans,calans(it));}
    return ans;
}
signed main()
{
    ios::sync_with_stdio(false);
    cin.tie(0);
    int T;cin>>T;while(T--)cout<<solve()<<"\n";
}

詳細信息

Test #1:

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

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

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: 99ms
memory: 5272kb

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: 111ms
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: 95ms
memory: 5292kb

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

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: 91ms
memory: 5072kb

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