思路:跟之前light oj 做的一个题思路差不多,题目化简之后求的就是 n*n-sigma(floor(n/i)*i) 然后根号n的范围分个类,可以求出结果。
C++大数模版到第14组数据超时,改用FFT求某一步乘法,还是TLE
用Java就过了 (郁闷的是:写了 // 等 注释就会CE) 呵呵
/**
* Created with IntelliJ IDEA.
* User: shiyuan
* Date: 13-9-2
* Time: 下午5:06
* To change this template use File | Settings | File Templates.
*/
import java.math.BigInteger;
import java.util.*;
public class Main {
public static void main(String args[]){
Scanner cin=new Scanner(System.in);
long n=cin.nextLong();
BigInteger ans=BigInteger.valueOf(n);
ans=ans.multiply(ans);
long tmp=(long)Math.sqrt(n);
for(long i=1;i<=tmp;i++){
if(i==n/i){
BigInteger cnt=BigInteger.valueOf((n/i)*i);
ans=ans.subtract(cnt);
continue;
}
BigInteger pnt=BigInteger.valueOf(n/i+n/(i+1)+1);
BigInteger cnt=BigInteger.valueOf(i * (n / i - n / (i + 1)));
pnt=pnt.multiply(cnt);
pnt=pnt.divide(new BigInteger("2"));
pnt=pnt.add(BigInteger.valueOf((n / i) * i));
ans=ans.subtract(pnt);
}
System.out.println(ans);
}
}