C - A New Function (整除分块 + 玄学优化)
题目链接:https://cn.vjudge.net/contest/270608#problem/C
题目大意:给你一个n,让你求从1->n中间每个数的因子之和(每个数在求因子的过程中不包括本身和1)
具体思路:n是到2e9,首先暴力肯定是不可取的,然后我们可以通过以下两个优化将复杂度降到O( sqrt(n) )左右.
第一个优化,通过打表我们可以观察到,出现次数为k的可能不止一个数,所以我们可以一次性的将出现次数为k的一次全部算出来,再对这些数进行求和,这些数都是连续的,可以直接用等差数列求和的公式.然后如果只有这一个优化的话,也肯定不行(我们需要求出现2->n-1次的..)
第二个优化,对于一个数k,在n中出现的次数是(n/i-1)次的,然后这又是一个优化.
最后,我们可以前sqrt(n)项用第一个优化,后sqrt(n)项用第二个优化没然后复杂度就大大降低了.
AC代码:
#include<cmath>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
# define ll long long
# define inf 0x3f3f3f3f
const int maxn = 100000+100;
int main()
{
    int T;
    cin>>T;
    int Case=0;
    while(T--)
    {
        ll n;
        cin>>n;
        ll ans=sqrt(n);
        ll sum=0;
        ll nex,pos=n/2;//出现两次的数的终点
        for(int i=2; i<=ans; i++)
        {
            nex=n/(i+1);//当i为2是,nex是出现两次的起点
            sum+=(i-1)*(pos-(nex+1)+1)*(pos+nex+1)/2;//用等差数列求和的公式.
            pos=nex;
        }
        for(int i=2; i<=pos; i++)
        {
            sum+=(n/i-1)*i;
        }
        cout<<"Case "<<++Case<<": "<<sum<<endl;
    }
    return 0;
}
												
											C - A New Function (整除分块 + 玄学优化)的更多相关文章
- LightOJ 1098(均值不等式,整除分块玄学优化)
		
We all know that any integer number n is divisible by 1 and n. That is why these two numbers are not ...
 - LOJ #2802. 「CCC 2018」平衡树(整除分块 + dp)
		
题面 LOJ #2802. 「CCC 2018」平衡树 题面有点难看...请认真阅读理解题意. 转化后就是,给你一个数 \(N\) ,每次选择一个 \(k \in [2, N]\) 将 \(N\) 变 ...
 - 洛谷 P6788  - 「EZEC-3」四月樱花(整除分块)
		
题面传送门 题意: 求 \[\prod\limits_{x=1}^n\prod\limits_{y|x}\frac{y^{d(y)}}{\prod\limits_{z|y}z+1} \pmod{p} ...
 - 洛谷 P2257 - YY的GCD(莫比乌斯反演+整除分块)
		
题面传送门 题意: 求满足 \(1 \leq x \leq n\),\(1 \leq y \leq m\),\(\gcd(x,y)\) 为质数的数对 \((x,y)\) 的个数. \(T\) 组询问. ...
 - 洛谷 P5518 - [MtOI2019]幽灵乐团 / 莫比乌斯反演基础练习题(莫比乌斯反演+整除分块)
		
洛谷题面传送门 一道究极恶心的毒瘤六合一题,式子推了我满满两面 A4 纸-- 首先我们可以将式子拆成: \[ans=\prod\limits_{i=1}^A\prod\limits_{j=1}^B\p ...
 - 51Nod 1225 余数之和 [整除分块]
		
1225 余数之和 基准时间限制:1 秒 空间限制:131072 KB 分值: 80 难度:5级算法题 收藏 关注 F(n) = (n % 1) + (n % 2) + (n % 3) + ... ...
 - [Bzoj 2956] 模积和 (整除分块)
		
整除分块 一般形式:\(\sum_{i = 1}^n \lfloor \frac{n}{i} \rfloor * f(i)\). 需要一种高效求得函数 \(f(i)\) 的前缀和的方法,比如等差等比数 ...
 - P2568 莫比乌斯反演+整除分块
		
#include<bits/stdc++.h> #define LL long long using namespace std; ; bool vis[maxn]; int prime[ ...
 - [POI2007]ZAP-Queries (莫比乌斯反演+整除分块)
		
[POI2007]ZAP-Queries \(solution:\) 唉,数论实在有点烂了,昨天还会的,今天就不会了,周末刚证明的,今天全忘了,还不如早点写好题解. 这题首先我们可以列出来答案就是: ...
 
随机推荐
- 【Linux】- 对find,xargs,grep和管道的一些理解
			
问题 相信大家都知道在目录中搜索含有固定字符串文件的命令: find . -name '*.py' |xargs grep test 刚开始的时候,我不熟悉xargs命令,所以直接使用的命令是: fi ...
 - Bootstrap-tagsinput标系统使用心得
			
最近工作中由于需求使用到了Bootstrap-tagsinput标系统,我的需求是: 1)能够从后台数据库获取标签信息展示到前端页面: 2)能够实现输入标签添加到后台,并ajax刷新页面: 3)能够实 ...
 - MATLAB串口操作和GUI编程
			
程序说明 V1.0 2015/2/08 MATLAB串口操作和GUI编程 概述 本文介绍了程序AD9512_Serial_GUI的编程思路和功能.该程序设计到MATLAB的图像用户界面编程的基 ...
 - 分页---Vue+.net+bootstrap实现
			
通过学习Vue,的确觉的Vue的双向绑定使用起来十分方便,因此研究了一下列表显示时分页的实现,这里我使用了bootstrap的样式,所以在页面中引用bootstrap的样式文件,后台提数据源使用.ne ...
 - AtCoder Regular Contest 074 瞎打记
			
(很长时间没更新了>_<) 由于机房的网总是奥妙重重,开考30多分钟之后我才登进去... 然后发现T1是个简单枚举,1A.T2是个简单优先队列,1A.T3似乎需要一点推导,先看了T4发现是 ...
 - wireshark系列之wireshark简介
			
前言:为什么要学wireshark?工欲善其事必先利其器,wireshark是一款工具软件,主要作用是抓取数据封包,可以帮助我们更加直观更加具象的学习各种网路协议(http.TLS.TCP.UDP.I ...
 - [BZOJ1503][NOI2004]郁闷的出纳员 无旋Treap
			
1503: [NOI2004]郁闷的出纳员 Time Limit: 5 Sec Memory Limit: 64 MB Description OIER公司是一家大型专业化软件公司,有着数以万计的员 ...
 - 洛谷P1273 有线电视网  【树上分组背包】
			
题目描述 某收费有线电视网计划转播一场重要的足球比赛.他们的转播网和用户终端构成一棵树状结构,这棵树的根结点位于足球比赛的现场,树叶为各个用户终端,其他中转站为该树的内部节点. 从转播站到转播站以及从 ...
 - C#调用GDI+1.1中的函数实现高斯模糊、USM锐化等经典效果。
			
http://www.cnblogs.com/Imageshop/archive/2012/12/13/2815712.html 在GDI+1.1的版本中,MS加入不少新的特性,其中的特效类Effec ...
 - 【目标检测】Faster RCNN算法详解
			
Ren, Shaoqing, et al. “Faster R-CNN: Towards real-time object detection with region proposal network ...