lg3708 koishi的数学题 [数学]
2018-02-07 19:36
155 查看
Description
输入一个整数n,设f(x)=∑ni=1x mod i,你需要输出f(1),f(2)...f(n)Input
一个正整数n。Output
用空格分隔的n个整数f(1),f(2)...f(n)思路
老师上课讲的例题,方法真的很神奇。观察样例,然后再继续观察。如果还是没有发现什么的话,就模拟打出一张表好了:(横坐标为i, 纵坐标为x)
有没有发现什么神奇的地方。显然每一横行加起来就是答案,神奇的是在于纵行!(不要问我怎么发现的)。
每一纵行的意义即是,对于一个固定的i, x递增时的x mod i。可以发现它是以i个为循环的数列。
处理上面一个数列复杂度较高,但是我们可以这样处理:发现对于一个固定的i, x递增时的x−(x mod )i,它便是每i项增加i的一个数列。于是我们可以每i个数打一个标记,标记意为增加i。
然后我们可以发现,f(x)可以从f(x-1)推到,便是f(x−1)+n−1−标记。(类似于前缀和+差分维护吧)
代码
#include <iostream> #include <algorithm> #include <cstdio> using namespace std; long long n,j,temp,ans,tag[MAXN]; //tag数组即为标记 int main(){ scanf("%lld",&n); for(int i=2; i<=n; i++) for(int j=i; j<=n; j+=i) tag[j]+=i; //处理tag数组,每i位加i for(int i=1; i<=n; i++) { ans+=n-tag[i]-1; printf("%lld ",ans); //递推得出答案 } return 0; }
相关文章推荐
- 洛谷 P3708 koishi的数学题
- 洛谷 P3708 koishi的数学题
- 【洛谷P3708】Koishi的数学题
- 【洛谷P3708】koishi的数学题
- 洛谷 P3708 koishi的数学题
- Unity3D中数学知识之【1】:SmoothDamp平滑阻尼
- 我的java学习路之循环学习应用demo2简单数学计算
- 数字图像处理中所用数学工具5---空间操作
- 07年全国数学建模感想+解题软件+源代码
- 整数N的因子个数和N!的因子个数(数学问题)
- 图像处理中的数学原理详解(Part3)
- [数学期望]BZOJ 1415
- luogu 3790 文艺数学题 - 矩阵树定理 - 容斥原理
- 【数学之美系列一】统计语言模型
- 求多边形面积,直线,折现,z型线分平面(数学问题)
- ACM学习历程—HDU5490 Simple Matrix (数学 && 逆元 && 快速幂) (2015合肥网赛07)
- 51nod 瞬间移动 (组合数学)
- 【Codeforces】937 C. Remove Extra One 数学
- 【数学之美 系列十七】 闪光的不一定是金子 谈谈搜索引擎作弊问题(Search Engine Anti-SPAM)
- 数学之路(2)-数据分析-R基础(16)