QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#721856 | #9705. Multiply | tarjen# | AC ✓ | 111ms | 5292kb | C++20 | 2.6kb | 2024-11-07 17:01:20 | 2024-11-07 17:01:20 |
Judging History
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";
}
Details
Tip: Click on the bar to expand more detailed information
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