题目链接

题意

输入一个整数\(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. cocos2dx lua 打印和保存日志

    在2d游戏中,经常会出现闪退或者报错的问题,通过写文本,将日志文件发送给服务端,让后端人员进行分析. 通过lua打印日志在文本文件中: local file = io.open(cc.FileUtil ...

  2. cocos2dx 3.x c++代码打包给lua调用过程(mac)

    下载cocos2dx 框架,在应用程序->cocos->framework->cocos2d-x-3.x->tools->tolua目录下,一个ini文件对应一个py文件 ...

  3. 如何用纯 CSS 创作一台拍立得照相机

    效果预览 按下右侧的"点击预览"按钮可以在当前页面预览,点击链接可以全屏预览. https://codepen.io/comehope/pen/YjYgey 可交互视频 此视频是可 ...

  4. 一个form表单对应多个submit

    一个form表单多个submit 在平时项目开发过程中,经常会遇到一个form表单对应多个submit提交的情况,那么 ,这种情况应该怎么解决呢,也很简单,这时候就不能用submit来提交了,可以通过 ...

  5. 【android】安卓开发apk列表

    - 谷歌的Zxing框架的扫码软件 (目前国内的应用商店很少此种类型的扫码app) - 解析IP地址功能,从IP地址(子网掩码)自动解析出网段,广播地址

  6. golang(go语言)调试和查看gc信息,以及gc信息解析

    这里记录一下调试golang gc的方法 启用gc打印: # GODEBUG=gctrace=1 go run ./main.go 程序启动后gc将打印如下信息: gc 65 @16.996s 0%: ...

  7. BZOJ 2465: [中山市选2009]小球

    难度在于读题 #include<cstdio> #include<algorithm> using namespace std; int a[1000005]; struct ...

  8. 虚拟机上的Linux学习

    title: 虚拟机上的Linux学习 date: 2018-08-08 15:48:28 updated: tags: [Linux,学习笔记] description: keywords: com ...

  9. foy: 轻量级的基于 nodejs 的通用 build 工具

    npm 的 scripts 下写的命令太多就很容易很乱,各种第三方轮子都只能解决一部分问题,总感觉不是很好用,想找个类似 make 的工具只能找到 jake, 可是 jake 的 API 太老,居然很 ...

  10. mongo以及mysql常用语句

    db.user.find({']}}).pretty(); db.user.find({primaryPhone:).forEach(function(user){print('my phonenum ...