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
样例输出
-
55
385
思想:在求一个数的几次幂时,可以用二分法来解决。。
#include<iostream> #include<string.h> #define M 10003 using namespace std; int doit(int i,int p) { if(p==1) return i%M; long long x=doit(i,p/2); x=x*x%M; if(p%2) x=(x%M*i)%M; return x; } int main() { int T; cin>>T; while(T--) { int n,p; cin>>n>>p; if(p==0) cout<<n%M<<endl; else{ int sum=0; for(int i=1;i<=n;++i) { sum=(sum+doit(i,p))%M; } cout<<sum<<endl; } }return 0; }
-
第一行单独一个数字t表示测试数据组数。接下来会有t行数字,每行包括两个数字n,p,