2019-2020 ICPC Asia Xuzhou Regional Contest【徐州现场赛】

题目:

209-2020 ICPC Asia Xuzhou Regional Onsite Contest

E. Multiply

题意:

找到最大的 i 使得 z*x^i 是 y! 的因子

分析:

题目有说:a1+a2+......+an < y,那么 z 一定是 y!的因子[1],所以答案一定存在;如果 a 是 b 的因子,那么必有:将两个数唯一分解后,a 的每个质因子的幂 <= b 相同的质因子的幂;那么做法就呼之欲出了,将 x 唯一分解后,找到每个质因子对应的最大的 i,然后取最小值便是最后的答案;x 的范围比较大,套个 Pollard_rho 模板就做完了

[1]简单证明:

还是考虑两边质因子分解,首先 y!包含 z 具有的所有质因子,那么只用看每个质因子的幂;设 z 分解后的某一个质因子为 p, z 中 p 的幂为(阶乘分解质因子来算):

X_z=\left \lfloor \frac{a_1}{p} \right \rfloor+\left \lfloor \frac{a_1}{p^2} \right \rfloor+...+\left \lfloor \frac{a_1}{p^{c_1}} \right \rfloor+...+\left \lfloor \frac{a_n}{p} \right \rfloor+\left \lfloor \frac{a_n}{p^2} \right \rfloor+...+\left \lfloor \frac{a_n}{p^{c_n}} \right \rfloor

y!分解后 p 的幂为:

X_y=\left \lfloor \frac{y}{p} \right \rfloor+\left \lfloor \frac{y}{p^2} \right \rfloor+...+\left \lfloor \frac{y}{p^{c}} \right \rfloor

又有:

C_i<C,\left \lfloor \frac{a_1}{p^x} \right \rfloor+\left \lfloor \frac{a_2}{p^x} \right \rfloor+...+\left \lfloor \frac{a_n}{p^x} \right \rfloor<=\left \lfloor \frac{y}{p^x} \right \rfloor

得证:

X_z<=X_y

代码:

#include <bits/stdc++.h>
 
using namespace std;
typedef long long LL;
const int maxn = 1e5+16;
LL x,y,a[maxn];
struct BigIntegerFactor{
    const static int maxm = 1e6+16;
    LL prime[maxm],p[maxm],fac[maxm],sz,cnt;     //多组输入注意初始化cnt = 0
    inline LL mul(LL a,LL b,LL mod){             //WA了尝试改为__int128或慢速乘
        if(mod <= 1000000000) return a * b % mod;
        return (a*b-(LL)
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值