【CF402D】Upgrading Array(素数+质因数+gcd+贪心)

不难发现 题目中给出的f函数 其实就是一个数分解质因数后好素数和坏素数的个数之差

也就是说 数x带来的贡献 与x的质因数的种类有关系 又联想到gcd[1~x]一定是这个数的因子 也就是说一个数的贡献可以表示成:f(gcd[1~x])+f(....)

容易想到贪心做法:我们从后往前枚举 如果当前gcd前缀带来的贡献<0 就除一下

另外有几个小细节我平时没有注意到的:
1.线性筛素数 其实枚举范围只需要到区间根号范围就行 如果要用到特别大的那几个素数只需特判就行(46行)
2.map和bitset屌爆了

#include<bits/stdc++.h> 
#define N 2000005
#define MAX 5000000
#define int long long
using namespace std;
template<class T>
inline void read(T &x)
{
    x=0;
    static char ch=getchar();
    while(ch<'0'||ch>'9')   ch=getchar();
    while(ch>='0'&&ch<='9') x=x*10+ch-'0',ch=getchar();
}
int n,m,a[N],gcd[N];
int prime[MAX+5],cnt,isprime[MAX+5];
bitset<1000000005> bad;
inline int calcgcd(int a,int b)
{
    return b? calcgcd(b,a%b):a;
}
void GetPrime()
{
    isprime[0]=isprime[1]=1;
    for(register int i=2;i<=MAX;i++)
    {
        if(!isprime[i]) prime[++cnt]=i;
        for(register int j=1;j<=cnt&&i*prime[j]<=MAX;j++)
        {
            isprime[i*prime[j]]=1;
            if(i%prime[j]==0)   break;
        }
    }
}
inline int calc(int x)
{
    if(x==1)    return 0;
    int sum=0;
    for(int i=1;i<=cnt&&prime[i]*prime[i]<=x;i++)
    {
        while(x%prime[i]==0)
        {
            sum+=(bad[prime[i]]?-1:1);
            x/=prime[i];
        }
    }
    if(x!=1)    sum+=(bad[x]?-1:1);
    return sum; 
}
main()
{
    read(n); read(m); 
    for(int i=1;i<=n;i++)   read(a[i]),gcd[i]=calcgcd(a[i],gcd[i-1]);
    GetPrime();
    for(int i=1,x;i<=m;i++) read(x),bad[x]=true;
    int ans=0,tag=1;
    for(int i=1;i<=n;i++)   ans+=calc(a[i]);
    for(int i=n;i>=1;i--)
    {
        gcd[i]/=tag;
        int tmp=calc(gcd[i]);
        if(tmp<0)
        {
            ans-=tmp*i;
            tag*=gcd[i];
        }
    }
    cout<<ans<<endl;
    return 0;
}

转载于:https://www.cnblogs.com/Patrickpwq/articles/9863591.html

内容概要:《中国HR+HER2-早期乳腺癌患者诊疗需求调研白皮书》聚焦于中国早期HR+/HER2-乳腺癌患者的诊疗现状和需求。白皮书通过定量调研,揭示了患者在确诊、复发风险评估、术后辅助治疗及长期管理等各阶段面临的挑战,包括对新药的期待、信息需求及信息渠道偏好。调研显示,患者对新型辅助治疗方案的疗效和生活质量提升寄予厚望,但也存在对不良反应的担忧。此外,患者在理解诊断报告、复发风险认知及获取权威信息方面存在诸多障碍。白皮书呼吁加强患者教育、优化医患沟通、提高新药可及性,以改善患者预后和生活质量。 适合人群:早期HR+/HER2-乳腺癌患者、家属、临床医生及相关医疗工作者。 使用场景及目标:①帮助患者更好地理解诊断结果和后续治疗方案;②为临床医生提供患者需求和挑战的真实数据,优化诊疗路径;③推动社会各界关注和支持早期乳腺癌患者的教育和管理,助力患者早日康复,重获高质量生活。 其他说明:白皮书强调了早期乳腺癌患者在诊疗旅程中面临的多重障碍,包括早期筛查覆盖率不足、复发风险认知偏差及医患沟通壁垒。为应对这些挑战,白皮书提出了多项改进建议,如加强乳腺健康教育、优化诊断结果沟通方式、提升患者对复发风险的认知、强化不良反应管理及构建权威信息平台等。
内容概要:本文档详细介绍了项目进度管理的知识体系,涵盖从启动到收尾的五大过程组,具体包括项目整合管理、范围管理、进度管理、成本管理、质量管理、资源管理、沟通管理、风险管理、采购管理和干系人管理。其中重点阐述了项目进度管理的六个核心过程:规划进度管理、定义活动、排列活动顺序、估算活动持续时间、制订进度计划和控制进度。每个过程详细描述了其定义、输入、工具、输出及相关补充信息。例如,在规划进度管理中,介绍了进度管理计划的内容,包括项目进度模型制定、准确度、计量单位等;在定义活动中,讲解了活动清单、活动属性和里程碑清单的构成;在排列活动顺序中,描述了紧前关系绘图法(PDM)和箭线图法(ADM)的应用;在估算活动持续时间中,介绍了类比估算、参数估算、三点估算和自下而上估算等方法;在制订进度计划中,详细说明了进度基准、项目进度计划、进度数据、进度网络分析等概念和技术;在控制进度中,讨论了数据分析、关键路径法、项目管理信息系统等工具的使用。 适合人群:项目管理人员、项目经理、项目团队成员及其他对项目进度管理感兴趣的人员。 使用场景及目标:①帮助项目管理人员掌握项目进度管理的核心流程和方法;②为项目经理提供详细的进度管理工具和技术指导;③协助项目团队成员理解并应用进度管理的最佳实践。 其他说明:本文档不仅提供了理论知识,还结合了实际操作中的工具和技术,旨在提高项目进度管理的效率和准确性。读者可以通过学习本文档,更好地规划、执行和监控项目进度,确保项目按时交付。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值