HDU 6069 Counting Divisors

本文介绍了一种利用素数筛选优化因数计数的方法,并通过代码实现展示了如何计算给定区间内所有整数的因数个数。特别关注了素数筛选算法的效率及其在实际问题中的应用。

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

// 变量命名很重要 你看我抄队友的代码抄一遍就t了 再改还是t 我以为是我不够大力 原来是这个变量名弄的太混乱了- -搞了好半天才发现哈哈 

//有一个很重要的定理是一个数的因数个数和他的素数幂次乘积表达式的关系 哈哈

当时比赛如果能想到并推出来这个 我想我们也是那200的分子了。。唉- -简单的素数题还是脑子想不开 比完赛要把知识点整理一下 好好搞下专题

还有我的素数筛好像比他的慢了100ms- -有点害怕

#include <iostream>
#include <algorithm>
#include <stdio.h>
#include <queue>
#include <limits.h>
#include <string.h>
#include <vector>
#include <map>
#include <math.h>
#define LL long long
#define INF 2100000000
#define fi first
#define se second
#define lowbit(x) (x&(-x))
#define eps 5e-7
using namespace std;
const int maxn=(int)1e6 +30;
const int MOD=998244353;
const int MAXN=(int )1e6;
LL prime[MAXN];
bool p[MAXN];
int getprime(){
    memset(prime,0,sizeof prime);
    for(int i=2;i<MAXN;i++){
        if(!prime[i]) prime[++prime[0]]=i;
        for(int j=1;j<=prime[0]&&prime[j]<=MAXN/i;j++){
            prime[prime[j]*i]=1;
            if(i%prime[j]==0)break;
        }
    }
    return prime[0];
}
int siever()
{
    for(int i=0;i<1000;i++)
        for(int k=(i<<1)+3,j=k*i+k+i;j<600000;j+=k)
            p[j]=1;
    int sp=1;
    for(int i=0;i<600000;i++)
        if(!p[i])prime[sp++]=(i<<1)+3;
    prime[0]=2;
    return sp;
}
LL a[maxn];
LL d[maxn];
int main(){
#ifdef shuaishuai
    freopen("C:\\Users\\hasee\\Desktop\\a.txt","r",stdin);
    //freopen("C:\\Users\\hasee\\Desktop\\b.txt","w",stdout);
#endif
    int pcnt=getprime();
    int t;
    scanf("%d",&t);
    while(t--){
        LL L,R,K;
        LL ans=0;
        scanf("%lld%lld%lld",&L,&R,&K);

        LL ed=sqrt(R)+1;
        LL beg=L;
        int r=0;
        while(L<=R){
            d[r]=1;
            a[r++]=L;
            L++;
        }
       // printf("%lld %d\n",a[0],tot);

        for(int i=1;prime[i]<=ed&&i<=pcnt;i++){
            LL tmp=beg%prime[i];
            int l=(tmp==0)? 0: (prime[i]-tmp);
            while(l<r){
                //printf("l: %d prime i\n",l);
                LL cnt=0;
                while(a[l]!=0&&a[l]%prime[i]==0){
                    a[l]/=prime[i];
                    cnt++;
                }
                d[l]*=(cnt*K+1LL);
                d[l]%=MOD;
                l+=(int)prime[i];
            }
        }
        for(int i=0;i<r;i++){
            if(a[i]>1) d[i]*=(K+1);//a[i]是个质数- -它的k次的因数就是1*(k+1)
            ans=(ans+d[i])%MOD;
        }

       // for(int i=0;i<tot;i++)printf("%d %lld %lld\n",i+1,a[i],d[i]);
        printf("%lld\n",ans);
    }
    return 0;
}

 

转载于:https://www.cnblogs.com/MeowMeowMeow/p/7284507.html

内容概要:该研究通过在黑龙江省某示范村进行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、付费专栏及课程。

余额充值