求 n%1+n%2+n%3+n%4+.........n%n=,n<=10^12次。

开始时盲目地找规律,结果一无所获。后来经学长点拨,天资愚钝,搞了半天才明白。

先上图:

对于该题,在求区间(根号n,n),由于n%i=n-i*x(这里x是从1枚举到根号n,每个k 对应n/(x+1)~n/x区间内,由于是等差数列(还是递减),直接用公式求和)。

哎(根号n,n)区间是被分割来求得,分成根号n次。

import java.io.*;
import java.util.Scanner;
import java.math.BigInteger;
public class Main{ public static void main(String[] args) {
int T;
Scanner in=new Scanner(System.in);
T=in.nextInt();
for(int ii=1;ii<=T;ii++)
{
long n;
BigInteger sum=new BigInteger("0");
n=in.nextLong();
long lasta=2*n;
for(long i=1;i*i<n;i++)
{
sum=sum.add(BigInteger.valueOf(n%i));
if((i+1)>=lasta){break;} //边界判断
long b=n/i;
long a=n/(i+1)+1;
BigInteger temp1=BigInteger.valueOf(n); //将一个 long型数据转为biginteger
temp1=temp1.multiply(BigInteger.valueOf((b-a+1)));
BigInteger temp2=BigInteger.valueOf(b+a);
temp2=temp2.multiply(BigInteger.valueOf(i)); //*
temp2=temp2.multiply(BigInteger.valueOf(b-a+1));
temp2=temp2.divide(BigInteger.valueOf(2)); //除以
temp1=temp1.subtract(temp2); // -
sum=sum.add(temp1); //+
lasta=a;
}
System.out.println("Case "+ii+": "+sum); //Java的println自动带换行。注意!
} } }

最新文章

  1. Spring Shedule Task之注解实现 (两次启动Schedule Task 的解决方案)
  2. 《C与指针》读后感
  3. log4net详细配置说明
  4. ASP.NET MVC 中将数据从View传递到控制器中的表单提交法
  5. JavaSE复习_8 泛型程序设计
  6. WordPress自定义文章页面模板
  7. python 交换变量值
  8. Java WebService简单实例
  9. python网上开发执行环境
  10. easyui的combobox将得到的数据设定为下拉框默认值和复选框设定默认值
  11. 在 Windows系统中编译node.js 源代码
  12. 关于RMAN的配置信息存储和控制文件的关系
  13. b端商家赋值权限
  14. 第6周-接口、内部类与Swing
  15. bootstrap html页面禁止放大缩小
  16. 51 nod 1023 石子归并 V3(GarsiaWachs算法)
  17. [20190226]测试使用bbed恢复索引.txt
  18. 安装Thinkphp5
  19. C#杂乱知识汇总
  20. 解决input框中加入disabled="disabled"之后,改变字体的颜色(默认的是灰色)

热门文章

  1. AppCrawler自动化遍历使用详解(版本2.1.0 )(转)
  2. AR报表控件的常见问题汇总
  3. 连接器前置挂载U盾
  4. ios之UIActionSheet
  5. 【JavaScript】两种常见JS面向对象写法
  6. MYSQL数据库SQL语句集锦
  7. Spring中使用注解 @Scheduled 执行定时任务
  8. C语言之结构体、联合体
  9. Python面向对象(约束,异常处理,md5加密)(五)
  10. 多线程并发情况下 重复insert问题