数据量太大,直接用BigInteger运算,这个题目就是算区间内所有数的平方和,直接套公式
1平方+2平方+...+加到n平方=n(n+1)(2n+1)/6
import java.util.*;
import java.math.BigInteger;
public class Main {
public static void main(String[] args) {
// TODO Auto-generated method stub
//平方和公式,1*1+2*2+n*n=n(n+1)(2n+1)/6
Scanner sc=new Scanner(System.in);
int q=sc.nextInt();
String x="1000000007";
BigInteger two=new BigInteger("2");
BigInteger one=new BigInteger("1");
BigInteger six=new BigInteger("6");
BigInteger three=new BigInteger("3");
BigInteger mod=new BigInteger(x);
for(int i=0;i<q;i++) {
String l=sc.next();
String r=sc.next();
BigInteger ll=new BigInteger(l);
ll=ll.subtract(one);
BigInteger rr=new BigInteger(r);
BigInteger len=new BigInteger(rr.subtract(ll).toString());
ll=ll.multiply((ll.add(one))).multiply(ll.multiply(two).add(one)).divide(six);
//System.out.println(ll.toString());
rr=rr.multiply((rr.add(one))).multiply(rr.multiply(two).add(one)).divide(six);
//System.out.println(rr.toString());
rr=rr.subtract(ll).multiply(three).add(len);
System.out.println(rr.mod(mod).toString());
}
}
}

京公网安备 11010502036488号