#14蒟蒻求助
  • 板块P1593 因子和
  • 楼主Twjx
  • 当前回复9
  • 已保存回复9
  • 发布时间2020/8/25 11:34
  • 上次更新2023/11/6 19:26:34
查看原帖
#14蒟蒻求助
259937
Twjx楼主2020/8/25 11:34
#include<bits/stdc++.h>
using namespace std;
#define int long long
inline int read(){
	int a=1,b=0;
	char ch=getchar();
	while(ch<'0'||ch>'9') ch=getchar();
	while('0'<=ch&&ch<='9') b=b*10+ch-'0',ch=getchar();
	return b;
}
const int p=9901;
int s[65],cnt,ss[65],ct,ans=1;
int qpow(int a,int b){
	int anss=1;
	while(b){
		if(b&1) anss=anss*a%p;
		a=a*a%p;
		b>>=1;
	}
	return anss%p;
}
int exgcd(int a,int b,int &x,int &y){
	if(b==0){
		x=1;y=0;return a;
	}
	int r=exgcd(b,a%b,x,y);
	int tem=x;
	x=y;
	y=tem-a/b*y;
	return r;//
}
int niyuan_tongyu(int a){
	int x,y;
	int d=exgcd(a,p,x,y);
	//if(d!=1) return -1;//无解
	return (x%p+p)%p;
}
int calc(int a,int b){
	if(a%p==1) return b+1;
	else {
		//printf("%lld\n",pow(a,b+1)-1);
		return ((qpow(a,b+1)-1)%p*niyuan_tongyu(a-1)%p)%p;
	}
}
signed main()
{
	int a,b,k=1;
	a=read();b=read();
	//if(a==0) {cout<<0<<endl;return 0;}//特判 
    //if(b==0||a==1) {cout<<1<<endl;return 0;}
	for(int i=2;i<=a-1;i++){
		if(a/i==a*1.0/i) {s[++cnt]=i,ss[cnt]=1;
		k=a/i;
		while(k){
		if(k/i==k*1.0/i) ss[cnt]++,k/=i;
		else break;}
		a=k;
		}
	}
	if(a!=1) {s[++cnt]=a;ss[cnt]=1;}
	//printf("%lld %lld\n",s[i],ss[i]);
	for(int i=1;i<=cnt;i++){
		ss[i]*=b;
	}
	for(int i=1;i<=cnt;i++){
		ans=(ans%p*calc(s[i],ss[i])%p)%p;
	}
	printf("%lld",ans%p);
	return 0;
}
2020/8/25 11:34
加载中...