P2261 [CQOI2007]余数求和 【整除分块】

时间:2022-09-04 10:27:22

一、题面

  P2261 [CQOI2007]余数求和

二、分析

  参考文章:click here

  对于整除分块,最重要的是弄清楚怎样求的分得的每个块的范围。

  假设$ n = 10 ,k = 5 $  

$$   i : 1 \  2 \ 3 \ 4 \ 5 \ 6 \ 7 \ 8 \ 9 \ 10  \\  \lfloor \frac{k}{i} \rfloor :  5 \ 2 \ 1 \ 1 \ 1 \ 0 \ 0 \ 0 \ 0 \ 0   $$

  我们推导出假设$ L = i $,那么,对应的 $ \lfloor \frac{k}{i} \rfloor $ 相等的最右边界为 $  R =  \lfloor \frac{k}{  \lfloor \frac{k}{i} \rfloor } \rfloor $.(具体证明可以看参考文章。)

  需要注意的细节是

  1 $R$可能超过$n$,所以要限制一下。

  2 一定要用$long long$。

三、AC代码

 1 #include <bits/stdc++.h>
2
3 using namespace std;
4 typedef long long ll;
5
6 int main()
7 {
8 //freopen("input.txt", "r", stdin);
9 ll n, k;
10 while(scanf("%lld%lld", &n, &k) != EOF)
11 {
12 ll ans = n * k;
13 ll L, R;
14 for(L = 1; L <= n; L = R + 1)
15 {
16 ll res = k/L;
17 if(res)
18 {
19 // 必须加min,因为k/res可能超过n,例如 k = 10, n = 6
20 R = min(k/res, n);
21 }
22 else
23 R = n;
24 ans -= res * (R - L + 1) * (R + L) / 2;
25 }
26 printf("%lld\n", ans);
27 }
28 return 0;
29 }

P2261 [CQOI2007]余数求和 【整除分块】的更多相关文章

  1. P2261 &lbrack;CQOI2007&rsqb;余数求和&lbrack;整除分块&rsqb;

    题目大意 给出正整数 n 和 k 计算 \(G(n, k)=k\ \bmod\ 1 + k\ \bmod\ 2 + k\ \bmod\ 3 + \cdots + k\ \bmod\ n\) 的值 其中 ...

  2. 洛谷 P2261 &lbrack;CQOI2007&rsqb;余数求和 &vert;&vert;整除&lpar;数论&rpar;分块

    参考:题解 令f(i)=k%i,[p]表示不大于p的最大整数f(i)=k%i=k-[k/i]*i令q=[k/i]f(i)=k-qi如果k/(i+1)=k/i=qf(i+1)=k-q(i+1)=k-qi ...

  3. 洛谷P2261 &lbrack;CQOI2007&rsqb; 余数求和 &lbrack;数论分块&rsqb;

    题目传送门 余数求和 题目背景 数学题,无背景 题目描述 给出正整数n和k,计算G(n, k)=k mod 1 + k mod 2 + k mod 3 + … + k mod n的值,其中k mod ...

  4. &lbrack;CQOI2007&rsqb; 余数求和 - 整除分块

    \(\sum_{i=1}^n\;k\;mod\;i\) Solution \(\sum_{i=1}^n\;k\;mod\;i\\=\sum_{i=1}^n(k-i\lfloor{\frac{k}{i} ...

  5. LUOGU P2261 &lbrack;CQOI2007&rsqb;余数求和&lpar;数论分块&rpar;

    传送门 解题思路 数论分块,首先将 \(k\%a\) 变成 \(k-a*\left\lfloor\dfrac{k}{a}\right\rfloor\)形式,那么\(\sum\limits_{i=1}^ ...

  6. 洛谷 P2261 &lbrack;CQOI2007&rsqb;余数求和 解题报告

    P2261 [CQOI2007]余数求和 题意: 求\(G(n,k)=\sum_{i=1}^n k \ mod \ i\) 数据范围: \(1 \le n,k \le 10^9\) \(G(n,k)\ ...

  7. Bzoj 1257 &lbrack;CQOI2007&rsqb;余数之和 &lpar;整除分块&rpar;

    Bzoj 1257 [CQOI2007]余数之和 (整除分块) 题目链接:https://www.lydsy.com/JudgeOnline/problem.php?id=1257 一道简单题. 题目 ...

  8. 洛谷——P2261 &lbrack;CQOI2007&rsqb;余数求和

    P2261 [CQOI2007]余数求和 关键在于化简公式,题目所求$\sum_{i=1}^{n}k\mod i$ 简化式子,也就是$\sum_{i=1}^{n}(k-\frac{k}{i}\time ...

  9. &lbrack;Luogu P2261&rsqb; &lbrack;CQOI2007&rsqb;余数求和 &lpar;取模计算&rpar;

    题面 传送门:https://www.luogu.org/problemnew/show/P2261 Solution 这题显然有一个O(n)的直接计算法,60分到手. 接下来我们就可以拿出草稿纸推一 ...

随机推荐

  1. Redis 数据库的安装

    安装redis真的是简单到不行了,三条命令就可以完成. 1.下载redis: 001.http://redis.io/ 002.也可以在我的网盘下载https://yunpan.cn/crSUX6aS ...

  2. su 切换用户的提示&quot&semi;This account is currently not available&quot&semi;

    su 切换ivalue用户时,提示"This account is currently not available"; 首先进入/etc/passwd文件中是否添加ivalue用户 ...

  3. 201521123061 《Java程序设计》第十一周学习总结

    201521123061 <Java程序设计>第十一周学习总结 1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多线程相关内容. 本周学习的是如何解决多线程访问中的互斥 ...

  4. wamp apache 设置多端口

  5. php爬虫入门 - 登录抓取内容

    PHP 写爬虫 说实话我也想用Python的,毕竟人家招牌.无奈我Python还停留在看语法的阶段,实在太惭愧,鞭笞一下自己加油学习.这里用php的CURL库进行页面抓取. 同事使用的系统需要先登录, ...

  6. 使用lua实现99乘法口诀表,就这么简洁

    for i=1,9 do for j=1,i do io.write(j,"*",i,"=",i*j," ") end print() en ...

  7. iscroll4升级到iscroll5全攻略笔记

    前段时间在搞移动终端(移动web)的项目,其中需要用到滚动的功能(html的滚动效果不好,且在低版本上不支持).后面上网找了下资料,发现大部分人都在用iscroll4(下面简称v4),下载下来试了下确 ...

  8. 大乐透 Java随机码

    package suijishu; import java.util.Random; // TODO Auto-generated method stub public class Xuanqi { ...

  9. 树莓派发射FM波——搭建私人小电台

    树莓派的应用十分广泛,有很多奇思妙想的应用非常有趣,在这里我们想实现一个小电台的功能,但是在这里需要说明,私人架设电台是违法行为,所以本案只作为自我娱乐所用,不能发射大功率的信号干扰正常的FM频段. ...

  10. iis7 appcmd命令

    iis中提供了appcmd命令 可以通过命令行来配置iis appcmd.exe 默认路径在 c:\windows\system32\inetsrv\下 若要回收应用程序池,请使用以下语法: appc ...