如何解决级数之和:1 ^ 1 + 2 ^ 2 + 3 ^ 3 +…+ n ^ nmod m
两个注意事项:
(a + b + c) % m
相当于
(a % m + b % m + c % m) % m
和
(a * b * c) % m
相当于
((a % m) * (b % m) * (c % m)) % m
结果,您可以使用O(log p )中的递归函数来计算每个项:
int expmod(int n, int p, int m) {
if (p == 0) return 1;
int nm = n % m;
long long r = expmod(nm, p / 2, m);
r = (r * r) % m;
if (p % 2 == 0) return r;
return (r * nm) % m;
}
并使用for
循环对元素求和:
long long r = 0;
for (int i = 1; i <= n; ++i)
r = (r + expmod(i, i, m)) % m;
该算法为O( n log n )。
解决方法
有人可以给我一个关于大n(例如10 ^ 10)的有效算法的想法,以找到上述序列的总和吗?
Mycode正在为n = 100000和m = 200000而被杀
#include<stdio.h>
int main() {
int n,m,i,j,sum,t;
scanf("%d%d",&n,&m);
sum=0;
for(i=1;i<=n;i++) {
t=1;
for(j=1;j<=i;j++)
t=((long long)t*i)%m;
sum=(sum+t)%m;
}
printf("%d\n",sum);
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。