1257: [CQOI2007]余数之和sum

Time Limit: 5 Sec  Memory Limit: 162 MB
Submit: 2001  Solved: 928
[Submit][Status]

Description

给出正整数n和k,计算j(n, k)=k mod 1 + k mod 2 + k mod 3 + … + k mod n的值,其中k mod i表示k除以i的余数。例如j(5, 3)=3 mod 1 + 3 mod 2 + 3 mod 3 + 3 mod 4 + 3 mod 5=0+1+0+3+3=7

Input

输入仅一行,包含两个整数n, k。

Output

输出仅一行,即j(n, k)。

Sample Input

5 3

Sample Output

7

HINT

50%的数据满足:1<=n, k<=1000 100%的数据满足:1<=n ,k<=10^9

Source

数论

题解:第一反应很明显——直接枚举,但是肯定TLE,于是我们发现X mod Y=X-[X/Y],这样子X的累计不难,于是乎关键问题转化为了[X/Y]的累计,当Y>=X时不用说啥,关键是Y<X时,假如O(N)的话,那么还是白搞了。。。所以可以考虑缩减到trunc(sqrt(n))级别——对于这一范围内的数直接算,对于商为[N/I]的只需要用二分确定其范围,然后直接累加,别的没了(Ps:1.注意开int64 2.注意考虑N<K的情况,设一个门楣 3.注意在商运算过程中考虑拍掉重复值,我为此WA了一次)

1 var

 2 
 3    i,j,k,l,m,n:longint;
 4 function min(x,y:longint):LONGINT;
 5          BEGIN
 6               IF X<Y THEN MIN:=X ELSE MIN:=Y;
 7          end;
 8 function max(x,y:longint):longint;
 9          begin
               if x>y then max:=x else max:=y;
          end;
 
 function find1(x,y:longint):longint;
          var l,r,i,j:longint;
          begin
               l:=;r:=x;
               while l<r do
                     begin
                          if (x div ((l+r) div ))>y then l:=(l+r) div + else r:=(l+r) div ;
 
                          i:=;
                     end;
               find1:=r;
          end;
 function find2(x,y:longint):longint;
          var l,r,i,j:longint;
          begin
               l:=;r:=x;
               while l<(r-) do
                     begin
                          if (x div ((l+r) div ))>=y then l:=(l+r) div  else r:=(l+r) div -;
 
                          i:=;
                     end;
               if (x div r)=y then exit(r) else exit(l);
          end;
 
 function ca(x,z:longint):int64;
          var i,j,a1,a2:longint;
          y:int64;
          begin
               y:=;
               for i:= to trunc(sqrt(x)) do
                   begin
                        if i>z then break;
                        a1:=min(find2(x,i),z);
                        a2:=max(find1(x,i),trunc(sqrt(x))+);
                        y:=y+(x div i)*i;
                        if a2<=a1 then y:=y+int64((int64(a1+a2)*int64(a1-a2+) div )*i);
                   end;
               exit(y);
          end;
 begin
            begin
                 readln(m,n);
                 writeln(int64(n)*int64(m)-ca(n,min(n,m)));
            end;
 end.
            

1257: [CQOI2007]余数之和sum的更多相关文章

  1. BZOJ 1257: [CQOI2007]余数之和sum

    1257: [CQOI2007]余数之和sum Time Limit: 5 Sec  Memory Limit: 162 MBSubmit: 3769  Solved: 1734[Submit][St ...

  2. bzoj 1257: [CQOI2007]余数之和sum 数学 && 枚举

    1257: [CQOI2007]余数之和sum Time Limit: 5 Sec  Memory Limit: 162 MBSubmit: 1779  Solved: 823[Submit][Sta ...

  3. BZOJ 1257: [CQOI2007]余数之和sum( 数论 )

    n >= k 部分对答案的贡献为 k * (n - k) n < k 部分贡献为 ∑ (k - ⌊k / i⌋ * i)  = ∑  , ⌊k / i⌋ 相等的数是连续的一段, 此时这段连 ...

  4. BZOJ 1257: [CQOI2007]余数之和sum【神奇的做法,思维题】

    1257: [CQOI2007]余数之和sum Time Limit: 5 Sec  Memory Limit: 162 MBSubmit: 4474  Solved: 2083[Submit][St ...

  5. 1257: [CQOI2007]余数之和sum - BZOJ

    Description 给出正整数n和k,计算j(n, k)=k mod 1 + k mod 2 + k mod 3 + … + k mod n的值,其中k mod i表示k除以i的余数.例如j(5, ...

  6. [BZOJ 1257] [CQOI2007] 余数之和sum 【数学】

    题目链接:BZOJ - 1257 题目分析 首先, a % b = a - (a/b) * b,那么答案就是 sigma(k % i) = n * k - sigma(k / i) * i     ( ...

  7. BZOJ 1257 [CQOI2007]余数之和sum(分块)

    [题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=1257 [题目大意] 给出正整数n和k,计算j(n,k)=k mod 1 + k mod ...

  8. BZOJ 1257 [CQOI2007]余数之和sum ——Dirichlet积

    [题目分析] 卷积很好玩啊. [代码] #include <cstdio> #include <cstring> #include <cmath> #include ...

  9. bzoj千题计划173:bzoj1257: [CQOI2007]余数之和sum

    http://www.lydsy.com/JudgeOnline/problem.php?id=1257 k%i=k-int(k/i)*i 除法分块,对于相同的k/i用等差序列求和来做 #includ ...

随机推荐

  1. Java线程:线程状态

    线程可以创建6状态: New()新创建.Runnable(可运行).Blocked(被阻塞). Waiting(等待).Timed waiting(计时等待).Terminated(被终止)1 新建线 ...

  2. dbf导入sqlserver的方法

    1. dbf导出为foxpro2.x. 2.打开excel,点击打开,选择dbase文件,选中第一步保存的文件. 3.另存为xls格式 4.使用sql的dts导入xls.

  3. ZooKeepr日志清理

    http://blog.csdn.net/xiaolang85/article/details/21184293

  4. 2017《JAVA技术预备作业》 1502 陈明宇

    1.阅读邹欣老师的博客,谈谈你期望的师生关系是什么样的? 我期望的师生关系应该是亦师亦友的关系,美丽的校园是我们学生居住生活最久的地方而老师则是和我们接触最为密切的人.在课堂上,老师是辛勤的园丁,向我 ...

  5. [译] 关于 Git 你需要知道的一些事情

    分支和合并 Git 跟其他版本控制系统最大的优势就在于其高级的分支模型. Git 允许而且 鼓励 你在本地使用多个完全独立的分支.这些分支的创建,合并和删除几乎都可以在几秒内完成. 这意味着你可以轻松 ...

  6. Sass与Compass——回顾

    compass 是sass的一个工具库 compass在sass 的基础上封装了一系列有用的模块,用来补充和丰富sass的工能, 安装: compass是用 ruby语言开发的,所以安装它之前必须安装 ...

  7. udp 双机通信(服务器循环检测)2

    此文摘自:http://blog.csdn.net/qinpeng100423/article/details/8980423,谢谢了 自己上一篇写的udp通信,只能运行一次,参考了这位博主的,只是把 ...

  8. 关于nodejs express4.X框架不支持layout模板的问题解决

    网上有有种方法是安装express-partials模块,然后在 app.set(‘view engine’, ‘ejs’); 这句后面加上app.use(partials());但是,经过我的反复尝 ...

  9. 解析jQuery中extend方法--用法《一》

    extend方法在jQuery中是一个很重要的方法,jQuey内部用它来扩展属性方法.常用语jQuery插件开发. jQuery提供了两个方法,$.extend和$.fn.extend,两个方法内部实 ...

  10. struts2接收参数的5种方法

    以下形式中最常用的是前两种 1. 使用Action的属性: 在action 里面定义要接收的参数,并提供相应的setter,getter,和提交参数的名称一致, 并不用做数据类型的转换相应提交方式可以 ...