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

博客解析了CF402D问题,指出解决方案关键在于理解f函数与质因数分解的关系,特别是质因数的好坏对答案的影响。通过计算gcd的前缀和,并采用贪心策略,当贡献小于0时去除因子。文中还提及线性筛素数的优化技巧,枚举范围可限制在区间根号内,并强调map和bitset在解决此类问题时的强大作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

不难发现 题目中给出的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;
}
内容概要:该研究通过在黑龙江省某示范村进行24小时实地测试,比较了燃煤炉具与自动/手动进料生物质炉具的污染物排放特征。结果显示,生物质炉具相比燃煤炉具显著降低了PM2.5、CO和SO2的排放(自动进料分别降低41.2%、54.3%、40.0%;手动进料降低35.3%、22.1%、20.0%),但NOx排放未降低甚至有所增加。研究还发现,经济性和便利性是影响生物质炉具推广的重要因素。该研究不仅提供了实际排放数据支持,还通过Python代码详细复现了排放特征比较、减排效果计算和结果可视化,进一步探讨了燃料性质、动态排放特征、碳平衡计算以及政策建议。 适合人群:从事环境科学研究的学者、政府环保部门工作人员、能源政策制定者、关注农村能源转型的社会人士。 使用场景及目标:①评估生物质炉具在农村地区的推广潜力;②为政策制定者提供科学依据,优化补贴政策;③帮助研究人员深入了解生物质炉具的排放特征和技术改进方向;④为企业研发更高效的生物质炉具提供参考。 其他说明:该研究通过大量数据分析和模拟,揭示了生物质炉具在实际应用中的优点和挑战,特别是NOx排放增加的问题。研究还提出了多项具体的技术改进方向和政策建议,如优化进料方式、提高热效率、建设本地颗粒厂等,为生物质炉具的广泛推广提供了可行路径。此外,研究还开发了一个智能政策建议生成系统,可以根据不同地区的特征定制化生成政策建议,为农村能源转型提供了有力支持。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值