BZOJ 1968_P1403 [AHOI2005]约数研究--p2260bzoj2956-模积和∑----信息学中的数论分块
第一部分
P1403 [AHOI2005]约数研究
题目描述
科学家们在Samuel星球上的探险得到了丰富的能源储备,这使得空间站中大型计算机“Samuel II”的长时间运算成为了可能。由于在去年一年的辛苦工作取得了不错的成绩,小联被允许用“Samuel II”进行数学研究。
小联最近在研究和约数有关的问题,他统计每个正数N的约数的个数,并以f(N)来表示。例如12的约数有1、2、3、4、6、12。因此f(12)=6。下表给出了一些f(N)的取值:

f(n)表示n的约数个数,现在给出n,要求求出f(1)到f(n)的总和。
输入输出格式
输入格式:
输入一行,一个整数n
输出格式:
输出一个整数,表示总和
输入输出样例
说明
【数据范围】
20%N<=5000
100%N<=1000000
200%N<=100000000000000
1000%N<=1000000000000000000000000000000000000000000000000000000000000000(63 0's)
本题原来基本上是一个暴力
不过结论比较重要
就是∑(i=1,n)d(i)=∑(i=1,n)(n/i)
此处下取整
这样的话发现对于比如说6
求右半部分为
6 3 2 1 1 1
有三个一
这重复计算了
这样可以实现二百分算法就是数论分块、
直接贴代码就行
#include<cstdio>
#include<iostream>
int n,ans=;
int main(){
scanf("%d",&n);
for(int i=,j;i<=n;i=j+){
j=n/(n/i);
ans+=(n/i)*(j-i+);
}
printf("%d",ans);
return ;
}
代码是对的!!!!!
1000分的算法需要反演等 达到n的三分之一次方logn
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
模积和
所求就是第一行
n《=1e9;
图片是用的别人的叫qingdaobaibai,谢谢!!!
这样就分块显然了
预备知识:
1.前面的那个题的内容
2.欧拉定理
3.(费马小)
4.乘法逆元
5.阿尔贝恒等式的一些知识
∑aibi=∑(k:1,n)∑(i:1,k)ai(bk-bk+1)+sabn
这里列举一下纲目 将在另一个合适的博客里写
∑ai∑bi=∑∑aibj
等
这是代码
#include<iostream>
#include<cstdio>
#define ll long long
#define p 19940417
#define ine2 9970209
#define ine6 3323403
using namespace std;
ll n,m;
ll calc(ll k,ll n)
{
ll tmp=;
for (ll i=,pos=;i<=k;i=pos+)
{
pos=min(n/(n/i),k);
(tmp+=(n/i)%p*(((pos+)*(pos)%p*ine2%p-(i-)*i%p*ine2%p+p)%p)%p)%=p;
}
return (tmp+p)%p;
}
ll calc0(ll n,ll m)
{
ll tmp=;
for (ll i=,pos=;i<=n;i=pos+)
{
pos=min(n/(n/i),m/(m/i));
(tmp+=(n/i)*(m/i)%p*((pos*(pos+)%p*(pos*+)%p*ine6%p-(i-)*i%p*(i*-)%p*ine6%p+p)%p)%p)%=p;
}
return (tmp+p)%p;
}
int main()
{
scanf("%lld%lld",&n,&m);
if (n>m) swap(n,m);
ll t1=calc(n,n),t2=calc(m,m),t3=calc(n,m),t4=calc0(n,m);
ll ans=((((ll)n*n%p-t1+p)%p)*(((ll)m*m%p-t2+p)%p)%p-((ll)n*n%p*m%p-(ll)t1*m%p-(ll)t3*n%p+t4%p+p*)%p+p)%p;
cout << ans << endl;
return ;
}
代码本非我打,感谢原出处的教学。
这样的话基本数论分块的两种模式就显然了
BZOJ 1968_P1403 [AHOI2005]约数研究--p2260bzoj2956-模积和∑----信息学中的数论分块的更多相关文章
- 洛谷P2260 [清华集训2012]模积和(容斥+数论分块)
题意 https://www.luogu.com.cn/problem/P2260 思路 具体思路见下图: 注意这个模数不是质数,不能用快速幂来求逆元,要用扩展gcd. 代码 #include< ...
- 洛谷——P1403 [AHOI2005]约数研究
P1403 [AHOI2005]约数研究 题目描述 科学家们在Samuel星球上的探险得到了丰富的能源储备,这使得空间站中大型计算机“Samuel II”的长时间运算成为了可能.由于在去年一年的辛苦工 ...
- 洛谷P1403 [AHOI2005] 约数研究 [数论分块]
题目传送门 约数研究 题目描述 科学家们在Samuel星球上的探险得到了丰富的能源储备,这使得空间站中大型计算机“Samuel II”的长时间运算成为了可能.由于在去年一年的辛苦工作取得了不错的成绩, ...
- [AHOI2005]约数研究
题目描述 科学家们在Samuel星球上的探险得到了丰富的能源储备,这使得空间站中大型计算机“Samuel II”的长时间运算成为了可能.由于在去年一年的辛苦工作取得了不错的成绩,小联被允许用“Samu ...
- P1403 [AHOI2005]约数研究
原题链接 https://www.luogu.org/problemnew/show/P1403 这个好难啊,求约数和一般的套路就是求1--n所有的约数再一一求和,求约数又要用for循环来判断.... ...
- P1403 [AHOI2005]约数研究 题解
转载luogu某位神犇的题解QAQ 这题重点在于一个公式: f(i)=n/i 至于公式是怎么推出来的,看我解释: 1-n的因子个数,可以看成共含有2因子的数的个数+含有3因子的数的个数……+含有n因子 ...
- BZOJ1968 [Ahoi2005] 约数研究
Description Input 只有一行一个整数 N(0 < N < 1000000). Output 只有一行输出,为整数M,即f(1)到f(N)的累加和. Sample Input ...
- 1968. [AHOI2005]约数研究【数论】
Description Input 只有一行一个整数 N(0 < N < 1000000). Output 只有一行输出,为整数M,即f(1)到f(N)的累加和. Sample Input ...
- [luoguP1403] [AHOI2005]约数研究(这。。。)
传送门 用类似筛法的原理,就好啦 ——代码 #include <cstdio> int n, ans; int a[1000001]; int main() { int i, j; sca ...
随机推荐
- N的阶乘HDOJ1042
我记得有一份代码是非常有技巧的,然而这一份就是很死板-每次跑50000,因为10000的阶乘最多才50000位,这样肯定就过了 #include<cstdio> #include<s ...
- 当打开一个.h或.cpp文件时, Solution Explorer就自动展开文件所在的目录
当打开一个.h或.cpp文件时, Solution Explorer就自动展开文件所在的目录: 如果不想展开: Tools -> Options -&g ...
- bzoj 3594: [Scoi2014]方伯伯的玉米田【二维树状数组+dp】
设f[i][j]为前i棵玉米被拔高了j(因为是单调不降所以前面越高越好,所以每次拔一个前缀),转移是f[i][j]=f[k][l]+1,l<=j,a[k]+l<=a[i]+j,然后用二维树 ...
- 【CodeForces - 546C】Soldier and Cards (vector或队列)
Soldier and Cards 老样子,直接上国语吧 Descriptions: 两个人打牌,从自己的手牌中抽出最上面的一张比较大小,大的一方可以拿对方的手牌以及自己打掉的手牌重新作为自己的牌, ...
- Json----Jackson 下载地址
下载地址: http://repo1.maven.org/maven2/com/fasterxml/jackson/
- BZOJ4974(给Next求最小字典序原串)
输入给出了最小循环节长度,暗示next数组. 然后自己按照自己的kmp板子逆着来一遍就好. ; int n, a, Next[maxn]; char str[maxn]; ]; int main() ...
- linux下使用svn创建版本库和权限管理
linux上的svn服务端如何和本地的电脑客户端结合使用 Linux上安装SVN服务器: 第一步:检查是否已安装 # rpm -qa subversion 第二步: 通过yum命令安装svnserve ...
- PHP获取今天开始和结束的时间戳、每周开始结束的时间戳、每月开始结束的时间戳
PHP获取今天内的时间 今天开始和结束的时间戳 $t = time(); $start = mktime(0,0,0,date("m",$t),date("d" ...
- 1-13Object类之toString方法
Object中的toString方法 SUN在Object类中设计toString方法的目的:返回java对象的字符串表示形式. 在现实的开发过程中,Object中的toString方法就是要被重写的 ...
- JVM内存配置参数-XMX,-XMS,-XMN的例子
转载:http://www.nowcoder.com/questionTerminal/093bfa948d144ce3b0a68b938ae8b4ec 对于JVM内存配置参数: -Xmx10240m ...