题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=420
超时了一次,最后用二分求幂才AC
/*import java.math.BigInteger; import java.util.Scanner; public class Main{//超时 public static void main(String[] args) { Scanner input=new Scanner(System.in); int N=input.nextInt(); while(N-->0){ int n=input.nextInt(); int p=input.nextInt(); long begin=System.currentTimeMillis(); BigInteger sum=BigInteger.valueOf(1); for(int i=2;i<=n;i++){ sum=sum.add(BigInteger.valueOf(i).pow(p).mod(BigInteger.valueOf(1003))); } System.out.println(sum); System.out.println(System.currentTimeMillis()-begin); } } }*/
AC代码:
import java.util.Scanner; public class Main{ public static void main(String[] args) { Scanner input=new Scanner(System.in); int N=input.nextInt(); while(N-->0){ int n=input.nextInt(); int p=input.nextInt(); if(p==0){ System.out.println(n); continue; } long sum=0; for(int i=1;i<=n;i++){ sum=(sum+pow(i,p)%10003)%10003; } System.out.println(sum); } } private static long pow(int a, int b) {//二分求幂 // TODO Auto-generated method stub if(b==1) return a; long x=pow(a,b/2); long v=((x%10003)*(x%100003))%10003; if(b%2==1) v=v*a%10003; return v; } }