码迷,mamicode.com
首页 > 其他好文 > 详细

NYOJ 420 p次方求和 (快速幂+同余定理)

时间:2015-01-07 20:55:57      阅读:151      评论:0      收藏:0      [点我收藏+]

标签:nyoj   快速幂   同余定理   

题目描述:

http://acm.nyist.net/JudgeOnline/problem.php?pid=420

一个很简单的问题,求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

题目分析:

快速幂+同余定理的问题,虽然已经写了好多次的快速幂但是还是没有记住,每次都是看模板,这次一定记住它。


AC代码:

 
/**
 *快速幂取摸+同余
 */
#include<iostream>
#include<cstdio>
#include<map>
#include<cstring>
#include<string>
#include<algorithm>
#include<queue>
#include<vector>
#include<stack>
#include<cstdlib>
#include<cctype>
#include<cstring>
#include<cmath>
using namespace std;
int mod(int a,int b,int n){
    int t = 1;
    if (b == 0)
        return 1;
    if (b == 1)
         return a%n;
    t = mod(a, b>>1, n);
    t = t*t % n;
    if (b&1){//b是奇数
        t = t*a % n;
    }
    return t;
 }

int main()
{
    int t;
    cin>>t;
    while(t--){
        int p,n;
        cin>>n>>p;
        int res=0;
        for(int i=1;i<=n;i++){
            int t=mod(i,p,10003);
            //cout<<t<<endl;
            res=(res%10003+t%10003)%10003;
        }
        cout<<res<<endl;
    }
	return 0;
}
        




NYOJ 420 p次方求和 (快速幂+同余定理)

标签:nyoj   快速幂   同余定理   

原文地址:http://blog.csdn.net/fool_ran/article/details/42498801

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!