luogu3935 Calculating
标题也许叫整除分块吧
求\(1\)到\(n\)因数的个数\(\sum_{i=1}^n(\sum_{d|n}1)\)
范围\(1e14\)时限3s
\(n\sqrt{n}\)的暴力铁定gg
分开考虑
\(1\)到\(n\)中含有\(1\)因数的个数有\(n/1\)个
含有2因数的个数有\(n/2\)个**
······
含有n因数的个数有\(n/n\)个
问题就转化为求\(\sum_{i=1}^{n}[\frac{n}{i}]\)
然后我们就可以把\(O(n\sqrt{n})\)的暴力转化为\(O(n)\)了
可还是过不了&1e14的数据&
我们发现,我们求得\(\frac{n}{i}\)在一段区间内是连续的
而且呈现单调递减,这样我们就可以开心的套用二分啦
那到底有多少段连续的区间
把i分开考虑
1到\(\sqrt{n}\)之内,if都不同撑死有\(\sqrt{n}\)段
\(\sqrt{n}\)到n之内,求\(\frac{n}{i}\)连续的一段,取值范围为1到\(\sqrt{n}\)之内,撑死也有\(\sqrt{n}\)个
区间个数是\(\sqrt{n}\)级别的,二分是\(log\)级别的
所以复杂度为\(O(\sqrt{n}logn)\)
一直以为这是根号的%>_<%
参见牛客练习赛25(1e9)
#include <bits/stdc++.h>
using namespace std;
long long ans;
int l,n;
int main() {
int q;
cin>>q;
while(q--) {
cin>>n;
l=1;
ans=0;
for(int i=1; i<=n; ++i) {
int r=n;
int mid=(l+r)>>1;
while(n/l!=n/r) {
mid=(l+r)>>1;
r=mid;
}
ans+=n/l*(r-l+1);
if(r==n) break;
l=r+1;
}
cout<<ans<<"\n";
}
return 0;
}
直到我遇到了这个题luogu3935以及评测80sTLE的惨痛
才发现我是个zz诶
| \(i\) | \(1\) | \(2\) | \(3\) | \(4\) | \(5\) | \(6\) | \(7\) | \(8\) | \(9\) | \(10\) | \(11\) | \(12\) |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| \(n/i\) | \(12\) | \(6\) | \(4\) | \(3\) | \(2\) | \(2\) | \(1\) | \(1\) | \(1\) | \(1\) | \(1\) | \(1\) |
当我们知道\(l\)的时候,也就是一段的开头,如何快速找到我们要的r呢
\(n/l\)是\(n\)中含有\(t=n/l\)块完整的\(l\)
那么\(n/t\)便是有\(t\)块最大的数,便是我们要求的\(r\)
所以\(r=n/(n/l)\)
所以我们求块的时间由二分的\(O(logn)\)变为了\(O(1)\)
复杂度为\(O(\sqrt{n})\)
#include <bits/stdc++.h>
#define ll long long
using namespace std;
const ll mod=998244353;
ll solve(ll n)
{
ll ans=0;
for(ll l=1,r;l<=n;l=r+1)
{
r=n/(n/l);
ans+=(r-l+1)%mod*(n/l)%mod;
ans%=mod;
}
return ans;
}
int main()
{
ll x,y;
cin>>x>>y;
cout<<((solve(y)-solve(x-1))%mod+mod)%mod;
return 0;
}
http://www.cnblogs.com/1000Suns/p/9193713.html
luogu3935 Calculating的更多相关文章
- 长时间停留在calculating requirements and dependencies 解决方案
如果Eclipse花费了很长的时间calculating requirements and dependencies(计算需求和依赖性 ) 这个问题通常就是在点击安装之后显示“Calculating ...
- 长时间停留在calculating requirements and dependencies 的解决方案
如果Eclipse花费了很长的时间calculating requirements and dependencies(计算需求和依赖性 ) 这个问题通常就是在点击安装之后显示“Calculating ...
- Calculating Stereo Pairs
Calculating Stereo Pairs Written by Paul BourkeJuly 1999 Introduction The following discusses comput ...
- Calculating simple running totals in SQL Server
Running total for Oracle: SELECT somedate, somevalue,SUM(somevalue) OVER(ORDER BY somedate ROWS BETW ...
- Codeforces Round #277 (Div. 2) A. Calculating Function 水题
A. Calculating Function Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/4 ...
- cf486A Calculating Function
A. Calculating Function time limit per test 1 second memory limit per test 256 megabytes input stand ...
- Android ADT安装时卡在Calculating requirements and dependencies
AndroidSDK及Eclipse安装都很顺利,但是在Eclipse下安装ADT插件时,先采用点击Help->installnew software->Add...,无论输入https: ...
- 长时间停留在calculating requirements and dependencies
如果安装插件的时候,Eclipse花费了很长的时间calculating requirements and dependencies(计算需求和依赖性 )这个问题通常就是在点击安装之后显示“Calcu ...
- 洛谷P3935 Calculating (莫比乌斯反演)
P3935 Calculating 题目描述 若xx分解质因数结果为\(x=p_1^{k_1}p_2^{k_2}\cdots p_n^{k_n},令f(x)=(k_1+1)(k_2+1)\cdots ...
随机推荐
- QtCreator 可以通过 Clang-Tidy 和 CLazy 对你的代码进行静态检查
QtCreator 可以通过 Clang-Tidy 和 CLazy 对你的代码进行静态检查 打开你的工程,点击Analyze -> Clang-Tidy and CLazy 选择你想分析的 cp ...
- windows平台mysql密码设置
登录mysql默认没有指定账号 查看默认账号是谁 select user(); mysql> select user();+----------------+| user() |+------- ...
- android studio 自定义控件
第一种方式: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:andro ...
- 007-spring cloud gateway-GatewayAutoConfiguration核心配置-RouteDefinition初始化加载
一.RouteDefinitionLocator 在Spring-Cloud-Gateway的GatewayAutoConfiguration初始化加载中会加载RouteDefinitionLocat ...
- 关hashMap跟hashTable的区别
1.HashMap和Hashtable都实现了Map接口 2.HashMap是非synchronized,而Hashtable是synchronized 3.HashTable使用Enumeratio ...
- Cobbler 自动化部署系统
yum安装 yum install -y epel-release yum install -y httpd dhcp tftp cobbler cobbler-web pykickstart xin ...
- linux 加减符号
[root@LocalWeb01 ~]# aa=11[root@LocalWeb01 ~]# bb=22[root@LocalWeb01 ~]# cc=$aa+$bb[root@LocalWeb01 ...
- #C++初学记录(深度搜索#递归)
深度搜索 走地图的题目是深度搜索里比较容易理解的题目,更深层次的是全排列和七皇后等经典题目,更加难以理解,代码比较抽象. 题目:红与黑 蒜厂有一间长方形的房子,地上铺了红色.黑色两种颜色的正方形瓷砖. ...
- 26最短路径之Floyd算法
Floyd算法 思想:将n个顶点的图G“分成”很多子图 每对顶点vi和vj对应子图Gij(i=0,1,…,n-1和j=0,1,…,n-1) 每对顶点vi和vj都保留一条顶点限于子图Gij中的最短路径P ...
- zw版【转发·台湾nvp系列Delphi例程】HALCON MirrorImage
zw版[转发·台湾nvp系列Delphi例程]HALCON MirrorImage procedure TForm1.Button1Click(Sender: TObject);var img, im ...