首页 > 其他 > 详细

【YBTOJ】约数之和

时间:2021-08-19 10:07:12      阅读:23      评论:0      收藏:0      [点我收藏+]

题目大意:

\(A^B\) 约数之和。

思路:

分治递归即可。

代码:

const int N = 0, mod = 9901;

inline ll Read()
{
	ll x = 0, f = 1;
	char c = getchar();
	while (c != ‘-‘ && (c < ‘0‘ || c > ‘9‘)) c = getchar();
	if (c == ‘-‘) f = -f, c = getchar();
	while (c >= ‘0‘ && c <= ‘9‘) x = (x << 3) + (x << 1) + c - ‘0‘, c = getchar();
	return x * f;
}

int qpow(int a, int b)
{
	a %= mod;
	int ans = 1;
	for (; b; b >>= 1, a = a * a % mod)
		if (b & 1) ans = ans * a % mod;
	return ans % mod;
}

int sum(int p, int k)
{
	if (k == 0) return 1;
	if (k & 1) return (1 + qpow(p, k / 2 + 1)) * sum(p, k / 2) % mod;
	return (p % mod * sum(p, k-1) + 1) % mod;
}

int a, b, ans = 1;

int main()
{
//	freopen(".in", "r", stdin);
//	freopen(".out", "w", stdout);
	a = Read(), b = Read();
	for (int i = 2; i <= a; i++)
	{
		int k = 0;
		for (; a % i == 0; a /= i) k++;
		ans = ans * sum(i, k * b) % mod;
	}
	printf ("%d\n", a? ans: 0);
	return 0;
}

【YBTOJ】约数之和

原文:https://www.cnblogs.com/GJY-JURUO/p/15159691.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!