Acwing 97
Acwing 97. 约数之和
题意
求的约数之和
思路
假设不考虑次方,只求a的约数之和,要怎么求呢?
当遇到一个数b能被a整除时,假设当前答案为,则应再加上。
a经过质数分解定理后为
当增加一个质数约数时,则答案应变为,
运用快速幂的思想 ,当x为奇数,则有偶数个项,
当x为偶数,则将x-1代入上式,多出的那个直接加到答案中
代码
int q_pow(int a,int b)
{
int res=1;
while(b)
{
if(b&1) res=(res*a)%mod;
a=a*a%mod;
b/=2;
}
return res;
}
int cal(int a,int b)
{
if(b==0) return 1ll;
int res=0;
if(b&1)
{
int k1=cal(a,b/2)%mod;
int k2=(q_pow(a,(b+1)/2)+1)%mod;
res=(res+k1*k2%mod)%mod;
}
else
{
res=(res+q_pow(a,b))%mod;//多出来的那个
int k1=cal(a,(b-1)/2)%mod;
int k2=(q_pow(a,b/2)+1)%mod;
res=(res+k1*k2%mod)%mod;
}
return res;
}
void solve()
{
cin>>n>>m;
ans=1;
if(n==0) {cout<<0<<endl;return;}
for(int i=2;i<=n;i++)
{
if(n%i==0)
{
int cnt=0;
while(n%i==0) cnt++,n/=i;
// ans*(i)
if(i*m>0) ans=(ans*cal(i,cnt*m))%mod;
}
}
cout<<ans<<endl;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)