欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

约数之和

程序员文章站 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;
}

 

相关标签: 分治法