系列之和:1^1 + 2^2 + 3^3 + ... + n^n (模 m)
有人能给我一个关于大 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);
}
Can someone give me an idea of an efficient algorithm for large n (say 10^10) to find the sum of above series?
Mycode is getting klilled for n= 100000 and 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);
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(6)
两个注意事项:
等价于
和
等价于
结果,您可以使用 O(log p) 中的递归函数计算每一项:
并使用
for
求和元素循环:该算法的时间复杂度为 O(n log n)。
Two notes:
is equivalent to
and
is equivalent to
As a result, you can calculate each term using a recursive function in O(log p):
And sum elements using a
for
loop:This algorithm is O(n log n).
我认为你可以使用欧拉定理来避免一些指数,如 phi(200000)=80000。中国剩余定理也可能有所帮助,因为它减少了模数。
I think you can use Euler's theorem to avoid some exponentation, as phi(200000)=80000. Chinese remainder theorem might also help as it reduces the modulo.
您可以查看我对这篇文章的回答。那里的实现有点问题,但想法是存在的。关键策略是找到 x 使得 n^(x-1)m 并重复将 n^n%m 减少到 (n^x%m)^(n/x)*n^ (n%x)%m。我确信这个策略是有效的。
You may have a look at my answer to this post. The implementation there is slightly buggy, but the idea is there. The key strategy is to find x such that n^(x-1)<m and n^x>m and repeatedly reduce n^n%m to (n^x%m)^(n/x)*n^(n%x)%m. I am sure this strategy works.
我最近遇到了类似的问题:我的'n'是1435,'m'是10^10。这是我的解决方案(C#):
最后的“s”等于所需的数字。
I encountered similar question recently: my 'n' is 1435, 'm' is 10^10. Here is my solution (C#):
At the end 's' is equal to required number.
你在这里被杀了吗:
指数 mod m 可以使用平方和方法来实现。
Are you getting killed here:
Exponentials mod m could be implemented using the sum of squares method.
我无法添加评论,但对于中国剩余定理,请参阅 http://mathworld.wolfram.com /ChineseRemainderTheorem.html 公式(4)-(6)。
I can't add comment, but for the Chinese remainder theorem, see http://mathworld.wolfram.com/ChineseRemainderTheorem.html formulas (4)-(6).