求f(k)=k^k(k=1...n)的前n项和

求f(k)=k^k(k=1...n)的前n项和。

程序实现:

#define _CRT_SECURE_NO_WARNINGS

#include<stdio.h>

long long My_Mul_Sum(int *n)//封装了一个求k^k的前n项和的函数

{

int k = 1;

long long sum = 0;//定义为long long是为了防止数据较大,容易溢出

for (k = 1; k <= n; k++)

{

int count = 0, mul = 1;//count是用来计数的

while (count!=k)

{

mul = mul*k;//mul表示k^k

count++;

}

sum = sum + mul;//sum为求n项和

}

return sum;

}

int main()

{

int num=0;

printf("请输入一个正整数:");

scanf("%d", &num);

long long ret = My_Mul_Sum(num);

printf("所求的和为:%I64d\n", ret);

system("pause");

return 0;

}

运行结果1:

请输入一个正整数:3

所求的和为:32

请按任意键继续. . .

运行结果2:

请输入一个正整数:10

所求的和为:1815136725

请按任意键继续. . .

时间: 2024-10-01 18:31:50

求f(k)=k^k(k=1...n)的前n项和的相关文章

hdu 1588 求f(b) +f(k+b) +f(2k+b) +f((n-1)k +b) 之和 (矩阵快速幂)

g(i)=k*i+b; 0<=i<nf(0)=0f(1)=1f(n)=f(n-1)+f(n-2) (n>=2)求f(b) +f(k+b) +f(2*k+b) +f((n-1)*k +b) 之和 Sample Input2 1 4 100 // k b n MOD2 0 4 100 Sample Output2112 矩阵A      相当于 1 1          f(2)  f(1) 1 0          f(1)  f(0) | 1       1| ^b          |

算法题:求数组中最小的k个数

说明:本文仅供学习交流,转载请标明出处,欢迎转载! 题目:输入n个整数,找出其中最小的k个数. <剑指offer>给出了两种实现算法: 算法1:采用Partition+递归法,该算法可以说是快速排序和二分查找的有机结合.算法的时间复杂度为O(n),缺点在于在修改Partition的过程中会修改原数组的值. 算法2:采用top-k算法.如果要找最小的K个数,我们才用一个含有K个值的大顶堆:如果要找最大的K个数,我们采用小顶堆.该算法的时间复杂度为O(nlogK),是一种比较好的算法,启发于堆排序

uva 12356 Army Buddies 树状数组解法 树状数组求加和恰为k的最小项号 难度:1

Nlogonia is fighting a ruthless war against the neighboring country of Cubiconia. The Chief General of Nlogonia's Army decided to attack the enemy with a linear formation of soldiers, that would advance together until conquering the neighboring count

求一个数组的最大k个数(java)

问题描述:求一个数组的最大k个数,如,{1,5,8,9,11,2,3}的最大三个数应该是,8,9,11 问题分析: 1.解法一:最直观的做法是将数组从大到小排序,然后选出其中最大的K个数,但是这样的解法,复杂度是O(logn*n),但是有时候并不需要排序,用简单的选择排序,或者是冒泡排序,那么就K轮的交换或者是选择,就可以得出结论,复杂度是O(n*k),当K很大的时候排序可能是更好的解法,当K小的时候用选择或者是冒泡效率会更加的高.但是这都是会对前K个数进行排序,所以效率不高,当K很大的时候,以

求 区间[a,b]内满足p^k*q*^m(k&gt;m)的数的个数

题目描述: 1<=a,b<=10^18,p,q都是素数  2<=p,q<=10^9; 求在[a,b]内可以表示为  x*p^k*q^m  k > m   的数的个数 分析: 由于要小于b,因此m一定小于 log10(b)/log10(p*q); 因此我们可以枚举m,中间计数的时候需要用到容斥. 具体看代码: #include <iostream> #include <cstdio> #include <cmath> #include <

4.2分别使用循环和递归两种策略求二项式从c(n,k);

//4.2分别使用循环和递归两种策略求二项式从c(n,k); //以for循环运行c(n,k) #include <iostream> using namespace std; int sum(int m); int main() { int n,k; int sum_n,sum_k,sum_i,sum_n_k; cout<<"请输入C(n,k)中的n值:"<<endl; cin>>n; cout<<"请输入C(n,

Lexicography(数学推论&gt;&gt;求按字典序排第k个排列)

Lexicography Time Limit:1000MS     Memory Limit:131072KB     64bit IO Format:%lld & %llu Submit Status Practice CSU 1563 Description An anagram of a string is any string that can be formed using the same letters as the original. (We consider the orig

POJ 题目3261 Milk Patterns(后缀数组求最长重叠至少k次的子串长度)

Milk Patterns Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 12128   Accepted: 5387 Case Time Limit: 2000MS Description Farmer John has noticed that the quality of milk given by his cows varies from day to day. On further investigation,

求排序数组中数字k出现的次数

思路:如果从头到尾遍历数组,那时间复杂度是O(n).我们可以利用题目给出的条件,由于是排序数组,我们可以利用二分查找来实现 时间复杂度为O(log2N) 具体代码如下: #include<iostream> #include<cassert> using namespace std; int findfirstk(int *ar, int len, int k, int start, int end)//利用二分查找找到第一个k出现的位置 { if(start > end)