一、原题目
1.题目描述
给定 f ( x ) f(x) f(x),求 f ( x ) f(x) f(x)对100000007取余的结果,其中:
f ( x ) = ∑ i = 1 x p o w ( i , i ) + 1 f(x)=\sum_{i=1}^{x}pow(i,i) + 1 f(x)=i=1∑xpow(i,i)+1
2.输入
多组测试样例,最多50组。每组测试样例给定一个整数x(1<=x<=25000)
3.输出
对每个样例,输出一行,代表 f ( x ) f(x) f(x)对100000007取余的结果。
4.样例输入
3
4
5
5.样例输出
33
289
3414
二、代码
#include<iostream>
#include<algorithm>
#include<cmath>
using namespace std;
#define MOD 100000007
typedef long long ll;
ll quickPow(ll num, ll n)
{
if (n == 0)
return 1;
else if (n % 2 == 1)
return quickPow(num, n - 1) * num % MOD;
else{
ll temp = quickPow(num, n / 2) % MOD;
return temp * temp % MOD;
}
}
int main()
{
int ans[25010];
ans[1] = 1;
for(int i = 2; i <= 25000; i++)
ans[i] = (ans[i - 1] + quickPow(i, i)) % MOD;
int x;
while(cin >> x)
cout<<(ans[x] + 1) % MOD<<endl;
return 0;
}