一系列的总和:1 ^ 1 + 2 ^ 2 + 3 ^ 3 + ... + N ^ N(模m) [英] Sum of series: 1^1 + 2^2 + 3^3 + ... + n^n (mod m)

查看:301
本文介绍了一系列的总和:1 ^ 1 + 2 ^ 2 + 3 ^ 3 + ... + N ^ N(模m)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

有人可以给我一个高效的算法n很大的想法(比如10 ^ 10)找到上述一系列的总和?

我的code是越来越klilled对于n = 100000和M = 200000

 #包括< stdio.h中>

诠释的main(){
    INT N,M,I,J,和,吨;
    scanf函数(%D,和放大器; N,放大器; M);
    总和= 0;
    对于(i = 1; I< = N;我++){
    T = 1;
    为(J = 1; J< = I,J ++)
    T =((久长)T * I​​)%米;
    总和=(总和+ T)%M;
    }
    的printf(%D \ N,总和);

}
 

解决方案

有两点需要注意:

 (A + B + C)%M
 

等同于

 (一%的M + B%M + C%M)%M
 

 (A * B * C)%M
 

等同于

 ((A%M)*(B%M)*(C%M))%M
 

这样一来,你可以在O使用递归函数计算出每个学期(日志的 P 的):

  INT expmod(INT N,INT磷,INT M){
   如果(P == 0)返回1;
   INT纳米= N%米;
   长长的R = expmod(纳米,P / 2,M);
   R =(R * r)的%间;
   如果(P%2 == 0)收益 -  [R;
   回报(R * NM)%米;
}
 

和使用循环和元素:

 长长的R = 0;
的for(int i = 1; I< = N; ++ I)
    R =(R + expmod(I,I,M))%米;
 

这个算法是O( N 的日志的 N 的)。

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);

}

解决方案

Two notes:

(a + b + c) % m

is equivalent to

(a % m + b % m + c % m) % m

and

(a * b * c) % m

is equivalent to

((a % m) * (b % m) * (c % m)) % m

As a result, you can calculate each term using a recursive function in 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;
}

And sum elements using a for loop:

long long r = 0;
for (int i = 1; i <= n; ++i)
    r = (r + expmod(i, i, m)) % m;

This algorithm is O(n log n).

这篇关于一系列的总和:1 ^ 1 + 2 ^ 2 + 3 ^ 3 + ... + N ^ N(模m)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆