2019ICPC徐州区域赛 E.Multiply

链接

点击跳转

题解

ai<Y\sum a_i < Y也就意味着ai!<Y\prod a_i! < Y

所以答案至少是00

那么我只需要对XX分解质因数,然后看一下每个质因数还能允许我容纳几个xx就可以了

分解质因数用Pollard Rho算法

代码

#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
#define iinf 0x3f3f3f3f
#define linf (1ll<<60)
#define eps 1e-8
#define maxn 1000010
#define maxe 1000010
#define cl(x) memset(x,0,sizeof(x))
#define rep(i,a,b) for(i=a;i<=b;i++)
#define drep(i,a,b) for(i=a;i>=b;i--)
#define em(x) emplace(x)
#define emb(x) emplace_back(x)
#define emf(x) emplace_front(x)
#define fi first
#define se second
#define de(x) cerr<<#x<<" = "<<x<<endl
using namespace std;
using namespace __gnu_pbds;
typedef long long ll;
typedef pair<int,int> pii;
typedef pair<ll,ll> pll;
ll read(ll x=0)
{
    ll c, f(1);
    for(c=getchar();!isdigit(c);c=getchar())if(c=='-')f=-f;
    for(;isdigit(c);c=getchar())x=x*10+c-0x30;
    return f*x;
}
struct Pollard_Rho
{
    ll md(ll x, ll p){while(x>p)x-=p;return x;}
    ll mult(ll a, ll b, ll p)
    {
        ll ans=0, t=a;
        for(;b;b>>=1,t=md(t+t,p))if(b&1)ans=md(ans+t,p);
        return ans;
    }
    ll pow(ll a, ll b, ll p)
    {
        ll ans=1, t=a;
        for(;b;b>>=1,t=mult(t,t,p))if(b&1)ans=mult(ans,t,p);
        return ans;
    }
    bool MR(ll n)
    {
        ll a, t, u, i, x, y, tim=20;
        if(n==2)return true;
        if(~n&1)return false;
        if(n==3 or n==5)return true;
        if(n%3==0 or n%5==0)return false;
        for(t=0,u=n-1;~u&1;u>>=1,t++);
        while(tim--)
        {
            a=rand()%(n-1)+1;
            for(y=x=pow(a,u,n),i=1;i<=t;i++)
            {
                x=mult(x,x,n);
                if(x==1 and y!=n-1 and y!=1)return false;
                y=x;
            }
            if(x!=1)return false;
        }
        return true;
    }
    ll pollard_rho(ll n, ll c)
    {
        ll i, k, x=rand()%n, y=x, d;
        for(i=1,k=2;;i++)
        {
            x=(mult(x,x,n)+c)%n;
            d=__gcd(y>x?y-x:x-y,n);
            if(d>1 and d<n)return d;
            if(x==y)return n;
            if(i==k)y=x,k<<=1;
        }
    }
    void find(ll n, ll c, map<ll,ll>& ans)
    {
        if(n==1)return;
        if(MR(n)){ans[n]++;return;}
        ll p=pollard_rho(n,c);
        for(;p==n;c++)p=pollard_rho(n,c);
        find(p,c,ans), find(n/p,c,ans);
    }
    map<ll,ll> run(ll n)
    {
        map<ll,ll> ans;
        find(n,1,ans);
        return ans;
    }
};
int main()
{
    ll T=read();
    Pollard_Rho PR;
    while(T--)
    {
        ll N=read(), X=read(), Y=read(), i;
        vector<ll> a(N+5);
        rep(i,1,N)a[i]=read();
        auto lis = PR.run(X);
        ll ans=linf;
        for(auto pr:lis)
        {
            ll cnt=0;
            rep(i,1,N)
            {
                ll t=a[i], p=0;
                while(t)
                {
                    p += t/pr.first;
                    t/=pr.first;
                }
                cnt -= p;
            }
            ll t=Y, p=0;
            while(t)
            {
                p += t/pr.first;
                t/=pr.first;
            }
            cnt += p;
            ans = min(ans,cnt/pr.second);
        }
        printf("%lld\n",ans);
    }
    return 0;
}
展开阅读全文

Python数据分析与挖掘

01-08
92讲视频课+16大项目实战+源码+¥800元课程礼包+讲师社群1V1答疑+社群闭门分享会=99元   为什么学习数据分析?       人工智能、大数据时代有什么技能是可以运用在各种行业的?数据分析就是。       从海量数据中获得别人看不见的信息,创业者可以通过数据分析来优化产品,营销人员可以通过数据分析改进营销策略,产品经理可以通过数据分析洞察用户习惯,金融从业者可以通过数据分析规避投资风险,程序员可以通过数据分析进一步挖掘出数据价值,它和编程一样,本质上也是一个工具,通过数据来对现实事物进行分析和识别的能力。不管你从事什么行业,掌握了数据分析能力,往往在其岗位上更有竞争力。    本课程共包含五大模块: 一、先导篇: 通过分析数据分析师的一天,让学员了解全面了解成为一个数据分析师的所有必修功法,对数据分析师不在迷惑。   二、基础篇: 围绕Python基础语法介绍、数据预处理、数据可视化以及数据分析与挖掘......这些核心技能模块展开,帮助你快速而全面的掌握和了解成为一个数据分析师的所有必修功法。   三、数据采集篇: 通过网络爬虫实战解决数据分析的必经之路:数据从何来的问题,讲解常见的爬虫套路并利用三大实战帮助学员扎实数据采集能力,避免没有数据可分析的尴尬。   四、分析工具篇: 讲解数据分析避不开的科学计算库Numpy、数据分析工具Pandas及常见可视化工具Matplotlib。   五、算法篇: 算法是数据分析的精华,课程精选10大算法,包括分类、聚类、预测3大类型,每个算法都从原理和案例两个角度学习,让你不仅能用起来,了解原理,还能知道为什么这么做。
©️2020 CSDN 皮肤主题: 撸撸猫 设计师: 设计师小姐姐 返回首页
实付0元
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值