首页 > 其他分享 >Trick-整除分块(数论分块)

Trick-整除分块(数论分块)

时间:2024-11-28 19:10:46浏览次数:5  
标签:frac 分块 int 个数 sqrt Trick 整除

整除分块:
对于类似于\(solve_{d=1}^{n}(\frac{n}{d})\)的式子, \(\frac{n}{d}\)的值的个数不超过\(\sqrt n\)个(下面有证明),故可以对于每一个结果去计算其贡献。
代码如下:

void calc(int n) {
   for(int l = 1, r; l <= n; l = r + 1) {
       r = n / (n / l);//d在区间[l,r]的n/d大小相同
       ans += n / d * solve(l, r);
   }
}

证明:
记\(\frac{n}{d}\)为x。x的取值范围在[1,n]。显然,[1,\(\sqrt n\)]的x更密集,(\(\sqrt n\), n]的x更稀疏。
因为d从1到n,只有d在[1,\(\sqrt n\)]时,\(\frac{n}{d}\)在(\(\sqrt n\), n],所以\(\frac{n}{d}\)在(\(\sqrt n\), n]的个数不超过\(\sqrt n\)
\(\frac{n}{d}\)从1到\(\sqrt n\)一共\(\sqrt n\)个数,所以总个数为\(O(\sqrt n)\)的。

一般式子中出现下取整,直接无脑整除分块。

标签:frac,分块,int,个数,sqrt,Trick,整除
From: https://www.cnblogs.com/water-flower/p/18574994

相关文章

  • 【分块】LibreOJ 6281 数列分块入门5
    前言对一个int类型的非负整数进行开方下取整,最多只会开方四次大小就不会再发生变化。一个大于\(0\)的正整数开方下取整最后的结果比如是\(1\),而\(1\)开方的结果仍然会是\(1\);\(0\)开方的结果仍是\(0\)。验证int类型整数最多可以开方的次数的demo#include<bits/stdc+......
  • PTA 整除光棍
    这里所谓的“光棍”,并不是指单身汪啦~说的是全部由1组成的数字,比如1、11、111、1111等。传说任何一个光棍都能被一个不以5结尾的奇数整除。比如,111111就可以被13整除。现在,你的程序要读入一个整数x,这个整数一定是奇数并且不以5结尾。然后,经过计算,输出两个数字:第一个数字s,表示......
  • 【分块】LibreOJ 6280 数列分块入门4
    题目https://loj.ac/p/6280题解将\(n\)个元素的数组\(a\)按块长\(\sqrt{n}\)进行分块处理。为每个块设置两个懒添加标记\(add[i],sum[i]\),分别代表这个区间每个元素共同添加的数值大小,区间和(不包括懒添加的值)。对于区间加操作,将添加值存储在符合整块都进行加法操作的......
  • 【分块】LibreOJ 6278 数列分块入门2
    题目https://loj.ac/p/6278题解将\(n\)个元素的数组\(a\)按块长\(\sqrt{n}\)进行分块处理。为每个块设置一个懒添加标记\(add[i]\),代表这个区间每个元素共同添加的数值大小。对于任意一个无序数组,想要维护出该数组内小于某个值的元素个数,时间复杂度都将来到\(O(n)\);对......
  • 【分块】LibreOJ 6279 数列分块入门3
    题目https://loj.ac/p/6279题解将\(n\)个元素的数组\(a\)按块长\(\sqrt{n}\)进行分块处理。为每个块设置一个懒添加标记\(add[i]\),代表这个区间每个元素共同添加的数值大小。对于任意一个无序数组,想要维护出该数组内某个值的前驱(即小于某个值的最大元素),时间复杂度都将......
  • 一系列整除问题,思维性很强
     第一题:abc048b  B-Betweenaandb... 问题描述给定非负整数 a 和 b(a≤b),以及一个正整数 x。在 a 和 b 之间(包括 a 和 b)的整数中,有多少个可以被 x 整除?约束条件0≤a≤b≤1018     1≤x≤1018输入输入从标准输入以以下格式给出:a b x输......
  • 高性能计算-探究循环分块优化(2-1)
    1.目标:分析循环分块优化技术,并分析cache命中情况假设每个cacheline可以存储b个数据元素。2.源代码分析for(inti=0;i<N;i++){ for(intj=0;j<M;j++) { A[i]+=B[j]; }}cachemiss分析:对A总访问次数为NM,每次访存加载一个cacheline可以加载b个元素,并且连续访问,......
  • 分块
    分块简单理解一下,分块就是优雅的暴力。分块的分类静态分块(只做查询,预处理):静态分块指的是放一些关键点,预处理关键点到关键点的信息,来加速查询的,不能支持修改。目前认为,如果可以离线,静态分块是莫队算法的子集。动态分块(支持修改和查询):动态分块指的是把序列分为一些块,每块......
  • 【C++练习】找出100到200之间不能被3整除的所有整数
    题目:找出100到200之间不能被3整除的所有整数题目描述:编写一个C程序,要求遍历100到200(包括100和200)之间的所有整数,并输出其中不能被3整除的所有整数。每个整数之间用一个空格隔开,在输出完所有满足条件的整数后,输出一个换行符。输出要求:输出100到200之间不能被3整除的所有整数......
  • 408数据结构-折半查找,分块查找 自学知识点整理
    前置知识:查找的基本概念折半查找折半查找又称二分查找,它仅适用于有序的顺序表。因个人习惯,下文均用二分代替折半。二分查找的基本思想:首先将给定值ke......