题目链接

题意

输入一个整数\(n\)\((n\leq 1e6)\),设\(f(x)=\sum_{i=1}^n x\mod i\),你需要输出\(f(1),f(2)...,f(n)\).

输入输出格式

输入格式:

一个正整数n。

输出格式:

一行用空格分隔的n个整数\(f(1),f(2)...f(n)\).

输入输出样例

输入样例#1:

10

输出样例#1:

9 16 22 25 29 27 29 24 21 13

思路

列表

			\i	1	2	3	4	5	6	7	8	9	10
x mod i\
x\
1 0 1 1 1 1 1 1 1 1 1
2 0 0 2 2 2 2 2 2 2 2
3 0 1 0 3 3 3 3 3 3 3
4 0 0 1 0 4 4 4 4 4 4
5 0 1 2 1 0 5 5 5 5 5
6 0 0 0 2 1 0 6 6 6 6
7 0 1 1 3 2 1 0 7 7 7
8 0 0 2 0 3 2 1 0 8 8
9 0 1 0 1 4 3 2 1 0 9
10 0 0 1 2 0 4 3 2 1 0

递推

在已经算出了\(f(x)\)的基础上,怎么得到\(f(x+1)\)呢?

因为$$(x+1)\mod i = ((x\mod i)+1)\mod i=

\begin{eqnarray}

\begin{cases}

(x\mod i)+1,&i\nmid (x+1)\cr

0, &i\mid (x+1)

\end{cases}

\end{eqnarray}$$

所以\(f(x+1)=f(x)+n-1-g(x+1)\),\(n-1\)的含义为下一行比上一行每个多\(1\),\(g(x+1)\)的含义为贡献本该算作\(0\)却算作了\(i\)因而多加了的部分,即\(\sum_{i\mid (x+1)}i\).

\(i=1\)的时候特殊处理一下。

线性筛

线性筛求一下约数和即可解决。

此处具体讲解可参见 积性函数的性质及证明 + 线性筛 ——Wubaizhe

Code

#include <bits/stdc++.h>
#define maxn 1000010
using namespace std;
typedef long long LL;
int prime[maxn], mx[maxn], sum[maxn], n, tot;
LL d[maxn], ans[maxn];
bool vis[maxn];
void init() {
d[1] = 0;
for (int i = 2; i <= n; ++i) {
if (!vis[i]) {
prime[tot++] = i;
d[i] = sum[i] = i+1;
mx[i] = i;
}
for (int j = 0; j < tot; ++j) {
if (prime[j] * i > n) break;
vis[prime[j] * i] = true;
if (i % prime[j] == 0) {
mx[i * prime[j]] = mx[i] * prime[j];
sum[i * prime[j]] = sum[i] + mx[i * prime[j]];
d[i * prime[j]] = d[i] / sum[i] * sum[i * prime[j]];
break;
}
mx[i * prime[j]] = prime[j];
sum[i * prime[j]] = prime[j] + 1;
d[i * prime[j]] = d[i] * d[prime[j]];
}
}
for (int i = 2; i <= n; ++i) --d[i];
}
int main() {
scanf("%d", &n);
init();
ans[1] = n-1; printf("%lld", ans[1]);
for (int i = 2; i <= n; ++i) {
ans[i] = ans[i-1] + n-1 - d[i];
printf(" %lld", ans[i]);
}
printf("\n");
return 0;
}

luogu 3708 koishi的数学题 递推 线性筛的更多相关文章

  1. CJOJ 2255 【NOIP2016】组合数问题 / Luogu 2822 组合数问题 (递推)

    CJOJ 2255 [NOIP2016]组合数问题 / Luogu 2822 组合数问题 (递推) Description 组合数\[C^m_n\]表示的是从n个物品中选出m个物品的方案数.举个例子, ...

  2. Luogu P2327 [SCOI2005]扫雷【递推/数学】By cellur925

    题目传送门 推了好久啊.看来以后要多玩扫雷了qwq. 其实本题只有三种答案:0.1.2. 对于所有第一列,只要第一个数和第二个数确定后,其实整个数列就确定了,我们可以通过这个递推式得出 sec[i-] ...

  3. * SPOJ PGCD Primes in GCD Table (需要自己推线性筛函数,好题)

    题目大意: 给定n,m,求有多少组(a,b) 0<a<=n , 0<b<=m , 使得gcd(a,b)= p , p是一个素数 这里本来利用枚举一个个素数,然后利用莫比乌斯反演 ...

  4. LUOGU P3708 koishi的数学题

    传送门 解题思路 发现当x+1时,有的x%i会+1,有的会变成0,而变成0的说明是x的约数,就可以nlogn预处理出每个约数的贡献,然后每次用n-约数. 代码 #include<iostream ...

  5. [模板] 积性函数 && 线性筛

    积性函数 数论函数指的是定义在正整数集上的实或复函数. 积性函数指的是当 \((a,b)=1\) 时, 满足 \(f(a*b)=f(a)*f(b)\) 的数论函数. 完全积性函数指的是在任何情况下, ...

  6. [NOI2017]泳池——概率DP+线性递推

    [NOI2017]泳池 实在没有思路啊~~~ luogu题解 1.差分,转化成至多k的概率减去至多k-1的概率.这样就不用记录“有没有出现k”这个信息了 2.n是1e9,感觉要递推然后利用数列的加速技 ...

  7. CH定理与线性递推

    才发觉自己数学差的要死,而且脑子有点浑浑噩噩的,学了一个晚上才学会 如果说的有什么不对的可以在下面嘲讽曲明 以下无特殊说明时,默认方阵定义在实数域上,用\(|A|\)表示\(A\)的行列式 特征值与特 ...

  8. luogu题解 P1707 【刷题比赛】矩阵加速递推

    题目链接: https://www.luogu.org/problemnew/show/P1707 分析: 洛谷的一道原创题,对于练习矩阵加速递推非常不错. 首先我们看一下递推式: \(a[k+2]= ...

  9. 求解线性递推方程第n项的一般方法

    概述 系数为常数,递推项系数均为一次的,形如下面形式的递推式,称为线性递推方程. \[f[n]=\begin{cases} C &n\in Value\\ a_1 f[n-1]+a_2 f[n ...

随机推荐

  1. POP简单动画简单使用 (入门级别)

    动画可以让APP“更友好”的与用户交互,苹果提供很多的好看的动画供开发者使用,不过简单的平移.旋转.缩放.......使用起来很简单,但是想要进行一些比较复杂的动画效果,使用起来就比较难以实现,俗话说 ...

  2. NOIP模拟赛 水灾

    大雨应经下了几天雨,却还是没有停的样子.土豪CCY刚从外地赚完1e元回来,知道不久除了自己别墅,其他的地方都将会被洪水淹没. CCY所在的城市可以用一个N*M(N,M<=50)的地图表示,地图上 ...

  3. Flask-蓝图、模型与CodeFirst

    一.应用.蓝图与视图函数 结构,如图: Flask最上层是app核心对象 ,在这个核心对象上可以插入很多蓝图,这个蓝图是不能单独存在的,必须将app作为插板插入app ,在每一个蓝图上,可以注册很多静 ...

  4. VSCode编译C/C++(一)MinGW安装配置指南

    为什么不用IDE? 更加专业.轻便.其过程对于理解计算机也有更多的帮助 安装过程: 首先进入http://mingw.org/  ,点击右侧最新发布,可以下载,然后安装 点击桌面MinGWInstal ...

  5. Linux学习-什么是例行性工作排程

    那么 Linux 的例行性工作是如何进行排程的呢?所谓的排程就是将这些工作安排执行的流程之意! 咱们的 Linux 排程就是透过 crontab 与 at 这两个东西! Linux 工作排程的种类: ...

  6. HDU 2460 Network 边双连通分量 缩点

    题意: 给出一个无向连通图,有\(m\)次操作,每次在\(u, v\)之间加一条边,并输出此时图中桥的个数. 分析: 先找出边双连通分量然后缩点得到一棵树,树上的每条边都输原图中的桥,因此此时桥的个数 ...

  7. java处理excel

    JAVA EXCEL API:是一开放源码项目,通过它Java开发人员可以读取Excel文件的内容.创建新的Excel文件.更新已经存在的Excel文件.使用该API非Windows操作系统也可以通过 ...

  8. Jenkins自动化搭建测试环境(一)

    Jenkins基础 首先上官网jenkins.io上下载最新的Jenkins war包 将下载完成的war包解压 java -jar jenkins.war 接下来使用浏览器访问localhost:8 ...

  9. loj2031 「SDOI2016」数字配对

    跑最大费用最大流,注意到每次 spfa 出来的 cost 一定是越来越少的,啥时小于 \(0\) 了就停了吧. #include <iostream> #include <cstri ...

  10. 大数据学习——sparkSql对接hive

    1.   安装mysql 2.   上传.解压.重命名 2.1.  上传 在随便一台有hadoop环境的机器上上传安装文件 su - hadoop rz –y 2.2.  解压 解压缩:apache- ...