题目链接 NYOJ420
【题目】
p次方求和
时间限制:
1000 ms | 内存限制:
65535 KB
难度:3
-
描述
-
一个很简单的问题,求1^p+2^p+3^p+……+n^p的和。
-
输入
-
第一行单独一个数字t表示测试数据组数。接下来会有t行数字,每行包括两个数字n,p,
输入保证0<n<=1000,0<=p<=1000。
输出
- 输出1^p+2^p+3^p+……+n^p对10003取余的结果,每个结果单独占一行。 样例输入
-
210 110 2
样例输出
-
55385
来源
- 原创
-
第一行单独一个数字t表示测试数据组数。接下来会有t行数字,每行包括两个数字n,p,
【分析】快速幂模版
【AC CODE】120ms
#include <cstdio>
#include <cstring>
#define MOD 10003
/*int pow_mod(int a, int n)//递归
{
if(!n) return 1;
int x = pow_mod(a,n>>1);
long long ans = (long long)x*x%MOD;
if(n&1) ans = ans*a%MOD;
return (int)ans;
}*/
int pow_mod(int a, int n)//递推
{
long long ans = 1, x = a;
while(n)
{
if(n&1) ans = (ans*x)%MOD;
x = x*x%MOD;
n >>= 1;
}
return ans;
}
int main()
{
#ifdef SHY
freopen("e:\\1.txt","r",stdin);
#endif
int t;
scanf("%d%*c", &t);
while(t--)
{
int n,p, ans = 0;
scanf("%d %d%*c", &n, &p);
for(int i = 1; i <= n; i++)
ans = (ans+pow_mod(i,p))%MOD;
printf("%d\n", ans);
}
return 0;
}