51nod 1225
2017-05-09 17:59
134 查看
题解见BZOJ1257
code:
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); } }
相关文章推荐
- 51nod 1225 余数之和
- 51nod 1225 数学
- 51NOD-1225 余数之和
- 51nod 1225 余数之和
- 51nod 1225 余数之和(根号n枚举)
- 51nod 1225 余数的和 数学
- 51nod 1225 余数之和 数论
- [数论] 51Nod 1225 余数之和
- 51Nod-1225-余数之和
- 51nod-1225-余数求和(分块)
- 51Nod 1225 余数之和 [整除分块]
- 51nod 1225 余数之和
- 51nod 1051 最大子矩阵和【dp】
- 51nod 1383 整数分解为2的幂(递推)
- 51nod 1433 0和5
- 51Nod 1138 连续整数的和
- 51Nod 1006 最长公共子序列Lcs
- 51Nod 1266 蚂蚁
- 51nod 1134 【最长上升子序列】
- 51nod 1770 数数字