首页 > 其他分享 >整数分块

整数分块

时间:2023-11-11 11:34:10浏览次数:25  
标签:lfloor 约数 分块 sum rfloor 整数 式子

整数分块(真的会考吗)

对于形如 \(\sum_{i=1}^{n}\lfloor x/i \rfloor\) 的式子,我们有这么一个\(O(\sqrt n)\)的做法

别管证明了,我已经不是很记得了,反正形式很简单

for(int l=1,r;l<=n;l=r+1){
    if(k/l!=0)r=min(k/(k/l),n);
    else r=n;
    sum+=(r-l+1)*(k/l); 
}

当然式子什么的都会有一点的变形
稍微举例两个:

1.

\[G(n, k) = \sum_{i = 1}^n k \bmod i \]

这个就是\(\sum_{i=1}^{n}k-i*\lfloor k/i \rfloor\)
然后变一下: \(n*k-\sum_{i=1}^{n}i*\lfloor k/i \rfloor\)
所以说你还要考虑块长贡献的\(i\),为等差数列
粘份代码:

for(int l=1,r;l<=n;l=r+1){
    if(k/l!=0)r=min(k/(k/l),n);
    else r=n;
    sum+=(r-l+1)*(k/l)*(l+r)>>1; 
}

2.

Calculating

题目描述

若 \(x\) 分解质因数结果为 \(x=p_1^{k_1}p_2^{k_2}\cdots p_n^{k_n}\),令\(f(x)=(k_1+1)(k_2+1)\cdots (k_n+1)\),求 \(\sum_{i=l}^rf(i)\) 对 \(998\,244\,353\)

相当于求约数个数的前缀和
直接考虑一个数会作为约数出现的次数
发现式子就是 \(\sum_{i=1}^{n}\lfloor n/i \rfloor\)
差分一下就结束了

标签:lfloor,约数,分块,sum,rfloor,整数,式子
From: https://www.cnblogs.com/ussumer/p/17825705.html

相关文章

  • 整数的四则运算(一步)
    #include<bits/stdc++.h>usingnamespacestd;stringno1(string);//清除多余空格intno2(string);//计算加法intno3(string);//计算减法intno4(string);//计算乘法intno5(string);//计算除法intmain(){stringstr;getline(cin,str);str=no1(st......
  • 语句var arr=[a,b,c,d];执行后,数组arr中每项都是一个整数,下面得到其中最大整数语句正
    语句vararr=[a,b,c,d];执行后,数组arr中每项都是一个整数,下面得到其中最大整数语句正确的是哪几项?AMath.max(arr)BMath.max(arr[0],arr[1],arr[2],arr[3])CMath.max.call(Math,arr[0],arr[1],arr[2],arr[3])DMath.max.apply(Math,arr)正确答案:BCDA选项错误......
  • 整数类型(2)
    <2>整数的内部表达————引入二进制,计算机内部一切都是二进制二进制:以2为基的数值系统,二进制整数以0,1数字序列组成,类比十进制:数字10相当于十进制中的2.(1)列举三个典型整数进行举例:(8个数字是因为1B=8bit)18——>00010010;0——>00000000;-18——>?————引入二进制负数的......
  • 输入不多于5位的正整数,输出它的每位数字和它是几位数,并将其按逆序排列
    #include<stdio.h>intmain(){  intm,a,b,c,d,e,i=0;  scanf_s("%d",&m);  a=(int)(m/10000);  b=(int)((m-a*10000)/1000);  c=(int)((m-a*10000-b*1000)/100);  d=(int)((m-a*10000-b*1000-......
  • 树套树板子,但是带修莫队+值域分块
    \(\text{Link-LuoguBlog}\)原题传送门没啥重要的事情,就是终于过了这题非常开心,发现自己是莫队的时间戳部分写错了调了114514年我也只能说是十分趣味。以及今天深刻地认识到了带修莫队应该len=pow(n,0.66);。就是裸的带修莫队+值域分块,就不说了,直接放代码了昂。如果有人......
  • 工资过万整数出错问题
    瀚高数据库目录环境症状问题原因解决方案环境系统平台:Linuxx86-64RedHatEnterpriseLinux7版本:4.5症状数据库类型为numric存储值为10000.00,获取数值后前台展示为1问题原因jdbc默认的传输方式是二进制解决方案URL中添加binaryTransferDisable=numeric......
  • 将整数转换为字符串的方法是什么?
    内容来自DOChttps://q.houxu6.top/?s=将整数转换为字符串的方法是什么?我正在一个项目中处理所有的从int到String的转换,都是像这样完成的:inti=5;StringstrI=""+i;我对Java不太熟悉。这是一种常见的做法吗?还是有什么错误呢?通常的做法是使用Integer.toStri......
  • 【pwn】整数溢出
    这是ctfshow上面的一道题这边v1和v2定义时都是int,有符号整数,想让v1-v2=9,可以考虑负数,但是这个函数过滤了负号 if(strchr(s,45))  return0LL;可以考虑输入比较大的数有符号溢出成负数,输入4294967295的话,就会解析成-1,然后8-(-1)==9就可以看第2个函数:首先int可表示......
  • 计算两个整数的和并打印结果
    #include<stdio.h> intmain(){   intnum1=5;   intnum2=10;   intsum=num1+num2;      printf("Thesumis%d\n",sum);   return0;}......
  • 分块:优雅的暴力
    之前我并没有感觉到分块的暴力属性今天卡常的时候莫名其妙的感觉到了我甚至觉得自己经历了分块的诞生历程今天本来在对一个分块题卡常但是我直接写的纯暴力,一直差一点卡过于是我想到了各种优化:加\(inline\)(别说还真有用),加\(register\)(感觉这个没用)...\(bitset\)记......