您的位置:首页 > 其它

51nod 1225

2017-05-09 17:59 134 查看
题解见BZOJ1257

code:

import java.util.*;
import static java.lang.System.*;
import java.math.*;
//import

public class Main{

public static BigInteger mod = BigInteger.valueOf(1000000007);
public static void main(String[] args){
Scanner in = new Scanner(System.in);
// long k = in.nextLong();
long n = in.nextLong();
BigInteger t = BigInteger.valueOf(n).mod(mod);
t = t.multiply(t).mod(mod);
t = t.subtract(solve(n)).mod(mod).add(mod).mod(mod);
out.println(t);
in.close();
}

public static BigInteger solve(long t){
BigInteger ret = BigInteger.valueOf(0);
//boolean f = false;
for(long i = 1; i * i <= t; ++i){
long r = t / i;
BigInteger tmp = BigInteger.valueOf(r);
//out.println(tmp);
ret = ret.add(tmp.multiply(BigInteger.valueOf(i))).mod(mod);
//out.println(ret);
long l = t / (i + 1);
// long tt = min(k, r);
if(i != r) {
//long l = t / (i + 1);
BigInteger p = cal(r).subtract(cal(l)).multiply(BigInteger.valueOf(i));
ret = ret.add(p).mod(mod);
}
}
return ret;
}
public static long min(long a, long b){
return a <= b ? a : b;
}
public  static BigInteger cal(long x){
BigInteger ret = BigInteger.valueOf(x);
BigInteger a = BigInteger.valueOf(x + 1);
BigInteger b = BigInteger.valueOf(2);
return ret.multiply(a).divide(b);
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: