sum函数

伯努利数学习笔记

痴心易碎 提交于 2020-03-26 23:32:40
1.定义式 定义伯努利数列 \(B_n\) 满足: \[B_0=1,\sum_{i=0}^n{n+1\choose i}B_i=0(n>0) \] 2.递推式 可以发现定义式里面包含了 \(B_n\) 这一项,于是把 \(B_n\) 提出来: \[-{n+1\choose n}B_n=\sum_{i=0}^{n-1}{n+1\choose i}B_i \\-(n+1)B_n=\sum_{i=0}^{n-1}{n+1\choose i}B_i \\B_n=-\frac{1}{n+1}\sum_{i=0}^{n-1}{n+1\choose i}B_i \] 直接用定义式求是 \(O(n^2)\) 的复杂度 3.生成函数 把定义式的循环上界减一 ,得: \[\sum_{i=0}^{n-1}{n\choose i}B_i=0 \] 注意到组合数上标变成了 \(n\) ,再加个 \(B_n\) : \[\sum_{i=0}^{n-1}{n\choose i}B_i+B_n=B_n \\\sum_{i=0}^{n-1}{n\choose i}B_i+{n\choose n}B_n=B_n \\\sum_{i=0}^{n}{n\choose i}B_i=B_n \] 组合数很烦,把它拆开来: \[\sum_{i=0}^{n}\frac{n!}{i!(n-i)!}B_i=B_n \\\sum_{i

bzoj 2694: Lcm

淺唱寂寞╮ 提交于 2020-03-25 23:43:05
LINK: LCM T组数据, \(T\leq 10000\) \(A,B\leq 4000000\) 简述一下这道题的式子:A,B用n,m来代替 \(\sum_{i=1}{n}\sum_{j=1}^{m}\mu((i,j))^2LCM(i,j)\) 我们可以简单推式子 推出: \(\sum_{w=1}^{n}w\cdot S(\frac{m}{w})\cdot S(\frac{n}{w})\cdot\sum_{x|w}x\cdot\mu(x)\mu(\frac{w}{x})^2\) 其中S(x)表示 \(\sum_{i=1}^xi\) 我们发现预处理后面的前缀和即可。 由于A B 最大4e6 这显然是在卡nlnn的算法 我们考虑线性筛出后面的东西。 设f(w)表示 \(\sum_{x|w}x\cdot\mu(x)\mu(\frac{w}{x})^2\) 那么f(w)其实是一个积性函数。 考虑 当w里存在p的时候 怎么筛 由于f(p^3)为0 p的更高次项也为0 那么f(p)=1-p,f(p^2)直接由f(p)*f(p)类似的式子计算即可。 这算是一个小trick吧 当w存在p的时候 我们还是可以通过除以p来获取互质 从而利用积性函数的性质来求答案。 由于答案对 \(2^30\) 取模 但是我们可以开unint 对 \(2^32\) 取模 最后 拿出后面的30位数即可。 const

JavaScript中的Function类型浅析

时光总嘲笑我的痴心妄想 提交于 2020-03-21 22:07:04
1. Function类型是js中引用类型之一,每个函数实际上都是Function类型的实例对象,具有自己的属性和方法。正因为函数式对象,所以函数名实际上也是一个指向函数对象的指针。 2. 常用的函数定义方式 1. 函数声明: function sum(a , b ){ return a+b; } 2. 表达式: var sum = function(){ return a+b; }; //注意分号 //两种方式的区别: //解释器会率先读取函数声明,并使其在执行之前可以访问,而使用表达式则必须等到解析器执行到它所在的代码行,才会真正被解释执行(变量声明提前,而值留在原地)alert (sum (10 ,10));function sum(a ,b){  return a+b;}//↑上面的代码会正常执行,因为在代码执行前,解析器通过函数声明提升,读取并将函数声明添加到执行环境中,放到代码树的顶部 alert (typeof sum);alert(sum(10 , 10));var sum = function (a ,b){  return a+b;}//↑报错,原因在于函数位于一个初始化语句中,不是一个函数声明,不会被提前,而只会把var sum提前,用typeof操作符显示sum是undefined,所以报错 3. 函数名仅仅保存指向函数对象的指针

杜教筛

淺唱寂寞╮ 提交于 2020-03-17 11:03:21
目录 目录地址 上一篇 下一篇 杜教筛 我们考虑计算 \(\displaystyle ans=\sum_{i=1}^n\boldsymbol f(i),n\leq 10^9\) 这种复杂度,首先,线性筛的复杂度肯定是不够了。我们考虑一个更优秀的方法,杜教筛 杜教筛的条件有三个: \(\boldsymbol f\) 为积性函数 存在积性函数 \(\boldsymbol g\) 其前缀和能快速计算 迪利克雷卷积 \(\boldsymbol f*\boldsymbol g\) 能快速计算前缀和 对于满足上述三个条件的 \(\boldsymbol f,\boldsymbol g\) ,我们来这么看: 设 \(\displaystyle F(n)=\sum_{i=1}^n\boldsymbol f(i)\) \(\displaystyle \sum_{i=1}^n(\boldsymbol f*\boldsymbol g)(i)=\sum_{i=1}^n\sum_{d\mid i}\boldsymbol f({i\over d})\boldsymbol g(d)=\sum_{d=1}^n\sum_{i=1}^n[d\mid i]\boldsymbol f({i\over d})\boldsymbol g(d)\) \(\displaystyle \therefore \sum_{i=1}^n(

软件工程概论课堂作业3

假如想象 提交于 2020-03-12 17:08:27
题目:返回一个整数数组中最大子数组的和 要求: 输入一个一维整形数组,数组里有正数也有负数。 一维数组首尾相接,象个一条首尾相接带子一样。 数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。 求所有子数组的和的最大值。 设计思想 : 用户自定义数组长度并依次输入数组元素,设一个全局变量初始化为零的数组a[N],N=10000; 1.因为该数组首尾相接可视作一个环,那么我们需要在一个合适的位置断开,把数组元素展成一条笔直的带子。 (1).设用户自定义数组长度为m,输入数组各元素值a[1]~a[m],在for循环中加入代码a[m+i]=a[i];(即复制输入的数组接在该数组最后一个数后面,其中i为循环变量) 例:若输入的数组为 1,-2,3,-4,5 那么实际生成的数组为1,-2,3,-4,5,1,-2,3,-4,5 (2).找出合适的位置断开,这个合适的位置即整个数组的最小值处,写一个函数找出输入的数组的最小值使该数排在第一位。 例:输入数组为 1,-2,3,-4,5 那么找出最小元素-4的位置并使其在第一位,所以实际生成并计算的数组为(下划线部分):1,-2,3, -4,5,1,-2,3 ,-4,5 2.在合适位置断开确定好数组后,根据第一次课堂作业(不考虑首尾相接的情况)计算 (1).从数组第一个不为零的元素累加,设累加值为S,为判断数组第一个不为负的元素

(PTA)6-2 使用函数求1到10的阶乘和 (10分)

风格不统一 提交于 2020-03-11 23:35:25
本题要求实现一个计算非负整数阶乘的简.单函数,使得可以利用该函数,计算1!+2!+⋯+10!的值。 函数接口定义: double fact( int n ); 其中n是用户传入的参数,其值不.超过10。如果n是非负整数,则该函数必须返回n的阶乘。 裁判测试程序样例.: #include <stdio.h> double fact( int n ); int main(void) { int i; double sum; sum = 0; for(i = 1; i <= 10; i++) sum = sum + fact(i); printf("1!+2!+...+10! = %f\n", sum); return 0; } /* 你的代码将被嵌在这里 */ 输入样例: 本题没有输入。 输出样例: 1!+2!+…+10! = 4037913.000000 double fact ( int n ) { int i ; double p ; p = 1 ; for ( i = 1 ; i <= n ; i ++ ) { p = p * i ; } return p ; } 来源: CSDN 作者: Overdrive13 链接: https://blog.csdn.net/Overdrive13/article/details/104804960

数组区间和

安稳与你 提交于 2020-03-09 08:26:48
给定一个整数数组 nums,求出数组从索引 i 到 j (i ≤ j) 范围内元素的总和,包含 i, j 两点。 示例: 给定 nums = [-2, 0, 3, -5, 2, -1],求和函数为 sumRange() sumRange(0, 2) -> 1 sumRange(2, 5) -> -1 sumRange(0, 5) -> -3 说明: 你可以假设数组不可变。 会多次调用 sumRange 方法 1 public class T303 { 2 private int[] sum; 3 public T303(int[] nums) { 4 sum = new int[nums.length + 1]; 5 for (int i = 0; i < nums.length; i++) { 6 sum[i] = sum[i - 1] + nums[i]; 7 } 8 } 9 10 public int sumRange(int i, int j) { 11 return sum[j + 1] - sum[i]; 12 } 13 } 来源: https://www.cnblogs.com/zzytxl/p/12446618.html

[数论]莫比乌斯反演3

杀马特。学长 韩版系。学妹 提交于 2020-03-01 08:53:41
索引 莫比乌斯反演1 定理 莫比乌斯反演2 证明 莫比乌斯反演3 技巧 实用技巧 1、 \[[gcd(i,j)=1]=\sum_{d|gcd(i,j)}\mu(d)\] 证明 根据性质1,其实就是莫比乌斯函数的定义 莫比乌斯函数的性质1 \[\sum_{d|n}\mu(d)=[n=1]\] 那么我们将gcd(i,j)带入n即可得到 \[\sum_{d|gcd(i,j)}\mu(d)=[gcd(i,j)=1]\] 证毕。 2、 求下式 \[\sum_{j=1}^{n}\sum_{j=1}^{m}gcd(i,j),(n<m)\] 因为 \[\sum_{d|n}\varphi(d)=n\] 我们按照套路将上式的要求的式子的 \(n\) 替换为 \(gcd(i,j)\) 即原式变换为: \[\sum_{i=1}^{n}\sum_{j=1}^{m}\sum_{d|gcd(i,j)}\varphi(d)\] 按照套路将d分类得 \[\sum_{d=1}^{n}\varphi(d)\times\lfloor\frac{n}{d}\rfloor\times\lfloor\frac{m}{d}\rfloor\] 结束。 3、 这是套路3(见下)的简化版 将一般求和式转为枚举式 例如下式: \[\sum_{i=1}^{\lfloor\frac{a}{d}\rfloor}\sum_{j=1}^{

题解-SDOI2015 约数个数和

筅森魡賤 提交于 2020-03-01 08:49:06
Problem bzoj3994 洛谷3327 题意:设 \(d(x)\) 为 \(x\) 的约数个数,给定 \(N,M\) ,求 \(\sum_{i=1}^N\sum_{j=1}^Md(ij)\) \(1\leq N,M,T\leq 5\times 10^4\) Solution 第一次推出莫反式 ♪(^∇^*) 以下部分中小括号代表 \(\gcd\) ,中括号代表取布尔值 一开始想枚举约数然后看有多少倍数出现过的,发现不好弄,转而想到 \(xy\) 的因数一定是 \(x\) 的因数和 \(y\) 的因数的积,去除冗余后可以得到 \(d(xy)=\sum_{a|x}\sum_{b|y}[(\frac xa,\frac yb)=1]=\sum_{a|x}\sum_{b|y}[(a,b)=1]\) 然后答案为: \[\sum_{i=1}^N\sum_{j=1}^M\sum_{a|i}\sum_{b|j}[(a,b)=1]\] 考虑优先枚举 \(a,b\) \[\sum_{a=1}^N\sum_{b=1}^M[(a,b)=1]\lfloor \frac Na\rfloor \lfloor \frac Mb\rfloor\] 发现里头那个 \(\gcd\) 可以套路地搞事了: 构造 \(f(x)=\sum_{a=1}^N\sum_{b=1}^M[(a,b)=x]\lfloor \frac

卷积 & 杜教筛

泪湿孤枕 提交于 2020-03-01 08:44:39
目录 卷积 杜教筛 前言:发现最近都没怎么写博客,,,赶紧发篇以前记的笔记 凑凑数 卷积 卷积定义:   如果有数论函数 \(f, g\) , 那么它们卷积的第 \(n\) 项为 \((f * g) (n)\) ,设这个卷出来的新函数为h,那么有    \[h(n) = \sum_{k | n} f(k) g(n / k) = \sum_{ij = n}f(i) g(j)\]    一些性质:   1,积性函数的卷积还是积性函数   证明: 现有 \(f, g\) 为积性函数,且 \(gcd(p, q) == 1\) ,求证 \(h(p) \cdot h(q) = h(qp).\)    \[h(p) \cdot h(q) = \sum_{ab = p}f(a) g(b) \cdot \sum_{cd = q}f(c) g(d)\]    \[= \sum_{a} f(a) g(\frac{p}{a}) \sum_{c} f(c) g(\frac{q}{c})\]    \[= \sum_{a} \sum_{c} f(a) f(c) g(\frac{p}{a}) g(\frac{q}{c})\]    \[= \sum_{a} \sum_{c} f(ac) g(\frac{pq}{ac})\]   因为 \(ac \cdot \frac{pq}{ac} = pq\) ,所以