nyoj420 P次方求和(快速幂)


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


思路:看了题马上想到快速幂,但貌似出题者本意并不是这样的,没办法数学太差只能用快速幂水过了

code:
#include <stdio.h>
#define mod 10003

int f(int a, int n){
	if(n == 0)
        return 1 % mod;
	if(n == 1)
        return a % mod;
	int t = f(a, n / 2);
	t = t * t % mod;
	if(n & 1)
        return t * a % mod;
	return t;
}

int main(){
	int t, a, n, s, i;
	scanf("%d", &t);
	while(t-- && scanf("%d%d", &n, &a)){
		for(i = 1, s = 0; i <= n; ++i)
			s += f(i, a),
        s %= mod;
		printf("%d\n", s);
	}
	return 0;
}

你可能感兴趣的:(nyoj420 P次方求和(快速幂))