整除分块

参考资料:整除分块_peng-ym

OI生涯中的各种数论算法的证明

公式

求:\(\sum_{i=1}^{n}\lfloor\frac{n}{i}\rfloor\)

对于每个\(\lfloor\frac{n}{i}\rfloor\)值相同的区间\([l,r]\)有\(r=n/(n/l)\),即对于\(\forall x\in [i,n/(n/i)]\)有\(x=\lfloor\frac{n}{i}\rfloor\).

时间复杂度

\(O(\sqrt{n})\)

代码

for(int l = 1, r; l <= n; l = r + 1)
{
r = n / (n / l);
ans += (r - l + 1) * (n / l);
}

异或性质

参考资料:

求一段连续自然数的异或结果

自然数异或前缀和

\[\bigoplus_{i=1}^{n} =\begin{cases}1, n\bmod4=1\\x+1, n\bmod4=2 \\0, n\bmod4=3\\x, n\bmod4=0\end{cases}
\]

Problem

异或约数和

51nod

定义\(f(i)\)为\(i\)的所有约数的异或和,给定\(n(1\leq n\leq 10^{14})\),求 \(f(1)xorf(2)xorf(3)xor...xorf(n)\)(其中\(xor\)表示按位异或)

先推出$$Ans=\bigoplus_{i=1}^{n}i ,(n/i)\bmod 2=0$$

用整除分块和异或前缀和

#include <iostream>
#include <cstdio>
#define ll long long using namespace std;
ll ans, n;
ll f(ll x) {
if(x % 4 == 1) return 1LL;
if(x % 4 == 2) return x + 1LL;
if(x % 4 == 3) return 0LL;
if(x % 4 == 0) return x;
}
int main()
{
cin >> n;
for(ll l = 1, r; l <= n; l = r + 1)
{
r = n / (n / l);
if((n / l) % 2 == 1) ans ^= f(r) ^ f(l - 1);
}
// for(int i = 1; i <= n; i++)
// ans ^= (n / i) % 2 == 0 ? 0 : i;
cout << ans << endl;
return 0;
}

[笔记] 整除分块 & 异或性质的更多相关文章

  1. 莫比乌斯反演&整除分块学习笔记

    整除分块 用于计算$\sum_{i=1}^n f(\lfloor{n/i} \rfloor)*i$之类的函数 整除的话其实很多函数值是一样的,对于每一块一样的商集中处理即可 若一个商的左边界为l,则右 ...

  2. 整除分块学习笔记+[CQOI2007]余数求和(洛谷P2261,BZOJ1257)

    上模板题例题: [CQOI2007]余数求和 洛谷 BZOJ 题目大意:求 $\sum^n_{i=1}k\ mod\ i$ 的值. 等等……这题就学了三天C++的都会吧? $1\leq n,k\leq ...

  3. LOJ #2802. 「CCC 2018」平衡树(整除分块 + dp)

    题面 LOJ #2802. 「CCC 2018」平衡树 题面有点难看...请认真阅读理解题意. 转化后就是,给你一个数 \(N\) ,每次选择一个 \(k \in [2, N]\) 将 \(N\) 变 ...

  4. [POI2007]ZAP-Queries (莫比乌斯反演+整除分块)

    [POI2007]ZAP-Queries \(solution:\) 唉,数论实在有点烂了,昨天还会的,今天就不会了,周末刚证明的,今天全忘了,还不如早点写好题解. 这题首先我们可以列出来答案就是: ...

  5. 数学--数论--整除分块(巨TM详细,学不会,你来打我)

    1.概念 从一道例题说起 在介绍整除分块之前,我们先来看一道算数题:已知正整数n,求∑i=1n⌊ni⌋已知正整数n,求∑i=1n⌊ni⌋在介绍整除分块之前,我们先来看一道算数题: 已知正整数n,求∑i ...

  6. P2424 约数和 【整除分块】

    一.题目 P2424 约数和 二.分析 因为都是加法,那么肯定有的一个性质,即前缀和的思想,就是$$ { ans =\sum_{i=1}^y f(i)} - {\sum_{i=1}^x f(i)}   ...

  7. P3235-[HNOI2014]江南乐【整除分块,SG函数】

    正题 题目链接:https://www.luogu.com.cn/problem/P3235 题目大意 \(T\)组游戏,固定给出\(F\).每组游戏有\(n\)个石头,每次操作的人可以选择一个数量不 ...

  8. 洛谷 P2257 - YY的GCD(莫比乌斯反演+整除分块)

    题面传送门 题意: 求满足 \(1 \leq x \leq n\),\(1 \leq y \leq m\),\(\gcd(x,y)\) 为质数的数对 \((x,y)\) 的个数. \(T\) 组询问. ...

  9. 51Nod 1225 余数之和 [整除分块]

    1225 余数之和 基准时间限制:1 秒 空间限制:131072 KB 分值: 80 难度:5级算法题  收藏  关注 F(n) = (n % 1) + (n % 2) + (n % 3) + ... ...

随机推荐

  1. 最短路(hdu2544)Dijkstra算法二

    最短路 Time Limit: 5000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submis ...

  2. Crossing River(1700poj)

    Crossing River Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 9919   Accepted: 3752 De ...

  3. 使用nginx+tomcat将所有请求都转发到一个页面

    1.将页面放到tomcat的root目录下,即ROOT/weihu.html 2.修改nginx配置文件 server{ listen ; # nginx监听的端口 root /opt/apache- ...

  4. Linux常用基本命令(more)

    more命令 作用:相比cat一次性显示文件内容,more用于分页显示内容,less比more更强大,大多数的参数类似 more [option] [file] -num : 每页显示num行 +nu ...

  5. CentOS 修改用户密码

    CentOS 修改用户密码 1.普通用户 ①获取超级用户root权限 命令:su 或者 su- 或者 su -root ②输入命令: passwd 用户名 ③输入新密码 2.超级用户 ①打开syste ...

  6. webpack打包小图片时进行Base64转码

    关于base64 优点: base64就是一串字符串码表示的图片,在加载页面和js时一块加载出来,减少了加载图片时的http请求.加载一张图片时会发起一次http请求,http请求每次建立都会需要一定 ...

  7. 为JavaScript正名--读你不知道的JavaScript(持续更新..)

    你不知道的JavaScript上卷 JavaScript和Java的关系就像Carnival和Car的关系一样,八竿子打不着. JavaScript易上手,但由于其本身的特殊性,相比其他语言能真正掌握 ...

  8. SQLServer 学习笔记之超详细基础SQL语句 Part 1

    Sqlserver 学习笔记 by:授客 QQ:1033553122 1创建数据库 格式: CREATE DATABASE database_name ON PRIMARY(在组文件组中指定文件) ( ...

  9. VC中添加头文件以及库

    原文:http://blog.csdn.net/lwb102063/article/details/52068389   附加头文件包含 VC6.0中: VC6.0默认include包含路径:Tool ...

  10. Android--仿一号店货物详情轮播图动画效果

    还不是很完全,目前只能点中间图片才能位移,图片外的其他区域没有..(属性动画),对了,图片加载用得是facebook的一款android图片加载库,感觉非常NB啊,完爆一切. 1.先看布局 <? ...