约数之和
程序员文章站
2022-05-08 19:17:51
...
假设现在有两个自然数A和B,S是A^B的所有约数之和。
请你求出S mod 9901的值是多少。
输入格式
在一行中输入用空格隔开的两个整数A和B。
输出格式
输出一个整数,代表S mod 9901的值。
数据范围
0≤A,B≤5×107
代码:
#include<iostream>
using namespace std;
int r=9901;
int ksm(long long int a,long long int b)
{
long long int ans=1%r;
for(;b;b>>=1)
{if(b&1)
ans=ans*a%r;
a=a*a%r;
}
return ans;
}
long long int sum(int p,int c)
{
if(c==0)
return 1;
if(c%2)
return ((1+ksm(p,(c+1)>>1))*sum(p,(c-1)>>1))%r;
else return ((1+ksm(p,c>>1))*sum(p,(c>>1)-1)+ksm(p,c))%r;
}
int main()
{
int a,b;
cin>>a>>b;
int answer=1;
for(int i=2;i<=a;i++)
{int s=0;
while(a%i==0)
{
s++;
a/=i;
}
if(s)
answer=answer*sum(i,s*b)%r;
}
if(a)
cout<<answer%r<<endl;
else cout<<"0"<<endl;
return 0;
}