HDU6069:Counting Divisors(因子数统计|区间筛)

本文介绍了一种计算特定区间内所有数的k次幂因子数之和的有效方法。通过先遍历素数,再遍历指定范围,避免了对每个数进行质因数分解的高成本操作。算法中利用了因子计算公式可以分步处理的特点,显著提高了效率。

题意
计算\(\sum_{i=l}^kd(i^k)(d_i代表i的因子数)\)
分析
比赛搞了3个小时都没搞出来,有两个思维上的trick
1.要先遍历素数,再遍历[L,R],而不是枚举每个数,然后对每个数进行质因数分解
2.比赛的时候我有想过枚举素数,但是忘记因子计算公式可以分开相乘,而不用一次性求粗来,导致我们队的崩盘,我要背锅!!!
具体的做法:枚举每个素数,并枚举[L,R]中的素数的倍数,对于每个倍数,统计因子个数,用b[i]代表第i个数的因子数,具体键代码

#include <bits/stdc++.h>
using namespace std;

#define ll long long
#define F(i,a,b) for(int i=a;i<=b;++i)
#define R(i,a,b) for(int i=a;i<b;++i)
#define mem(a,b) memset(a,b,sizeof(a))
const ll mod = 998244353;
const int maxn=1000000;
int prime[maxn+10];
bool p[maxn+10];

inline void get_prime()
{
   F(i,2,maxn)
   {
      if(!p[i]) prime[++prime[0]]=i;//prime[0]存储1~maxn的质数个数
      for(int j=1;j<=prime[0]&&i*prime[j]<=maxn;++j)
      {
         p[i*prime[j]]=1;
         if(i%prime[j]==0) break;
      }
   }
}

int t;
ll L,R,K,ans;
ll a[maxn+10],b[maxn+10];//a数组存储对于每个质数除后的数,b数组存放i的因子个数

void calc()
{
    int len=R-L+1;
    R(i,0,len) a[i]=i+L,b[i]=1;
    for(int i=1;prime[i]*1LL*prime[i]<=R;++i)
    {
        ll x=prime[i],k=L/x*x,cnt;
        if(k<L) k+=x;
        for(;k<=R;k+=x) if(a[k-L]%x==0)
        {
            cnt=0;
            while(a[k-L]%x==0) cnt++,a[k-L]/=x;
            cnt=cnt*K+1;
            b[k-L]=b[k-L]*cnt%mod;
        }
    }
    ans=0;
    //R(i,0,len) printf("%I64d%c",a[i],i==len-1?'\n':' ' );
    R(i,0,len)
    {
        if(a[i]!=1) b[i]=b[i]*(K+1)%mod;
        //printf("%I64d%c",b[i],i==len-1?'\n':' ' );
        ans=(ans+b[i])%mod;
    }
}

int main()
{
    get_prime();
    for(scanf("%d",&t);t--;)
    {
        scanf("%lld %lld %lld",&L,&R,&K);
        calc();
        printf("%I64d\n",ans );
    }
    return 0;
}

转载于:https://www.cnblogs.com/chendl111/p/7284455.html

内容概要:本文深入研究了基于最优滑模控制的永磁同步电机(PMSM)调速系统模型,重点利用Simulink工具搭建并仿真了该控制系统的动态响应特性。文章系统阐述了最优滑模控制策略的设计原理,突出其在削弱传统滑模控制固有抖振现象、增强系统鲁棒性方面的显著优势。通过与传统滑模控制方法的对比实验,充分验证了所提出方法在调速精度、抗外部干扰能力以及动态响应速度等方面的优越性能。研究内容涵盖PMSM学建模、滑模面构造、最优控制律推导、Lyapunov稳定性分析、参整定及Simulink仿真验证等完整环节,形成了一套严谨的控制算法设计与实现流程。; 适合人群:具备自动控制原理、现代控制理论基础和MATLAB/Simulink仿真操作能力,从事电机驱动控制、电力电子与电力传动、运动控制或自动化等相关领域研究的工程技术人员及高校研究生。; 使用场景及目标:① 深入掌握滑模控制理论及其在高性能电机调速系统中的具体应用方法;② 学习如何设计并实现能够有效抑制抖振的最优滑模控制器,以提升系统整体鲁棒性和控制品质;③ 利用Simulink平台独立完成从理论建模到仿真验证的全过程,服务于科研课题、课程设计或实际工程项目。; 阅读建议:建议读者务必结合MATLAB/Simulink环境动手复现文中模型,重点关注滑模切换面的设计准则、控制律的学推导过程以及控制器参的调节规律,并通过施加不同的负载扰动、设定多种转速指令等方式全面测试系统的动态与稳态性能,从而深刻理解最优滑模控制的核心机理与工程应用价值。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值