sum函数

[洛谷P4213]【模板】杜教筛(Sum)

江枫思渺然 提交于 2020-03-01 07:41:46
题目大意: 给你$n$,求: $$ \sum\limits_{i=1}^n\varphi(i),\sum\limits_{i=1}^n\mu(i) $$ 最多$10$组数据,$n\leqslant2^{31}-1$ 题解: 杜教筛,用来求$\sum\limits_{i=1}^nf(i)$的,其中$f$是某个特殊函数。 若我们可以找到一个函数$g$,使得$g,f*g$两个函数的前缀和十分好算($g*f$表示$g$和$f$的狄利克雷卷积),就可在$O(n^{\frac 23})$的复杂度内求出我们要的东西。令$S(n)=\sum\limits_{i=1}^nf(i)$ $$ \begin{align*} \sum\limits_{i=1}^n(g*f)(i)&=\sum\limits_{i=1}^n\sum\limits_{d|i}g(d)f\left(\dfrac id\right)\\ &=\sum\limits_{d=1}^ng(d)\sum\limits_{i=1,d|i}^nf\left(\dfrac id\right)\\ &=\sum\limits_{d=1}g(d)S\left(\left\lfloor\dfrac nd\right\rfloor\right) \end{align*}\\ g(1)S(n)=\sum\limits_{i=1}^n(f*g)(i)-

第2章-1 计算 11+12+13+...+m (30分)

大憨熊 提交于 2020-02-29 15:32:36
PTA 浙大版《Python 程序设计》题目集 第2章-1 计算 11+12+13+…+m (30分) 输入一个正整数m(20<=m<=100),计算 11+12+13+…+m 的值。 输入格式: 在一行输入一个正整数m。 输出格式: 在一行中按照格式“sum = S”输出对应的和S. 输入样例: 在这里给出一组输入。例如: 90 输出样例: 在这里给出相应的输出。例如: sum = 4040 方法1 print ( 'sum =' , sum ( [ i for i in range ( 11 , int ( input ( ) ) + 1 ) ] ) ) 方法2 m = int ( input ( ) ) sum = 0 for i in range ( 11 , m + 1 ) : sum += i print ( 'sum =' , sum ) 方法3 注: python3中的reduce函数需要先导包才可以使用 from functools import reduce print ( 'sum =' , reduce ( lambda x , y : x + y , [ i for i in range ( 11 , int ( input ( ) ) + 1 ) ] ) ) 来源: CSDN 作者: Joker-Tong 链接: https://blog.csdn

「min_25筛」

房东的猫 提交于 2020-02-29 07:59:00
min25_筛是一种用于快速求出一种积性函数的筛法. 它的使用有三个条件: 1.必须是积性函数 2.必须是低阶多项式的形式 3. \(p^j\) 的函数值能够快速求出,不一定是 \(O(1)\) . 首先定义 \(g(n,j)\) 表示[1,n]中最小质因子 \(>p_j\) 或者它是质数,满足两条件之一 \(i\) 的 \(i^k\) (低阶多项式那一部分?)的和. \(g(n,j)=\sum_{i=1}^n[min\ p>p_j|i\in P]i^k\) \(g(n,0)=\sum\limits_{i=2}^ni^k\) 转移的话分为 \(p_j^2<=n\) , \(p_j^2>n\) . 1.若 \(p_j^2\) >n,则不可能存在一个合数满足 \(min\ p>p_j\) ,所以 \(g(n,j)=g(n,j-1)\) 2. \(p_j^2\) <=n. 考虑从 \(g(n,j-1)\) 移动到 \(g(n,j)\) 的损失必定是 \(min\ p==p_j\) 的那些数的函数值. \(g(n,j)=g(n,j-1)-p_j^k(g(\frac{n}{p_j},j-1)-\sum\limits_{i=1}^{j-1}p_i^k)\) 所以 \[ g(n,j)=\begin{cases} g(n,j-1)&p_j^2>n\\ g(n,j-1)-p_j^k(g(\frac

「笔记」$Min\\_25$筛

旧街凉风 提交于 2020-02-16 21:53:06
总之我也不知道这个奇怪的名字是怎么来的。 \(Min\_25\) 筛用来计算一类积性函数前缀和。 如果一个积性函数 \(F(x)\) 在质数单点是一个可以快速计算的关于此质数的多项式。 那么可以用 \(Min\_25筛\) 。 这个东西和质数关系很大。 我们考虑分开处理质数和非质数的贡献。 首先处理质数: 设, \(R(n)\) 为 \(n\) 的最小质因子, \(P\) 为质因子集合, \(p_i\) 为从小到大第 \(i\) 个质数。 \(\forall\ x\in P,F(x)=x^k\) 。 设: \[g(n,j)=\sum\limits_{i=1}^{n}i^k[i\in P||R(i)>p_j]\] 那么转移: 如果当前 \(p_j^2>n\) ,因为最小的含有 \(p_j\) 的合数是 \(p_j^2\) ,所以没有贡献需要减掉。 那么: \[g(n,j)=g(n,j-1)\] 如果当前 \(p_j^2<=n\) ,这个时候要减掉一些贡献了。 这些贡献是 \(p_j\) 所带来的,而这个时候左右 \(R(i)=p_j\) 的贡献都需要被减掉。 考虑求出这部分的贡献。 那么显然是对于其所能达到的最小的合数开始计算到所能达到的最大合数。 这一部分显然是属于 \([p_j^2,n]\) 。 那么考虑这一部分的贡献。 可以容易的得到转移方程。 \[g(n,j)=g(n,j-1

hdu 2013 蟠桃记

不羁岁月 提交于 2020-02-08 02:31:04
蟠桃记 题目分析: 很普通的一道函数题,利用所给的条件,进行过程的模拟,构造出一个函数 代码: #include<iostream> using namespace std; int fun(int m) { int sum = 0; if (m == 1) { return 1; } else{ sum = 1; while (--m) { sum = 2 * (sum + 1); } return sum; } } int main() { int n; while (cin >> n) { cout << fun(n) << endl; } system("pause"); return 0; } 来源: https://www.cnblogs.com/pcdl/p/12275368.html

课堂作业之首尾相连子数组值

萝らか妹 提交于 2020-02-04 04:10:08
设计思路:将数组中每个元素依次作为数组的第一个数,利用取余保证数组首尾相接,查找每个数组的所有子数组,找到子数组和的最大值。 程序源代码: import java.util.Scanner; public class java { public static int maxSum(int arr[]){ //定义一个函数maxSum 求数组中子数组和的最大值 int sum = arr[0]; //sum 子数组和 int b = 0; for(int i = 0;i<arr.length;i++) { if(b<=0) //子数组和小于0时,b为子数组为0时的元素的后一位 { b=arr[i]; } else {b+=arr[i]; } //b 子数组和 if(b>sum)sum=b; //将最大子数组和赋值给sum } return sum; } public static void main(String[] args) { System.out.println("请输入数组中元素个数;"); Scanner reader=new Scanner(System.in); int n=reader.nextInt(); int []array=new int[n]; int []array1=new int[n]; System.out.println("请输入数组:");

积性函数及其前缀和学习笔记

二次信任 提交于 2020-02-03 00:02:49
概念常识部分 常用公式和符号 $\sum \limits_{i=1}^n i^2 = \dfrac{n(n+1)(2n+1)}{6}$ $\sum \limits_{i=1}^n i^3 = (\dfrac{n(n+1)}{2})^2$ $(i,j)=\gcd(i,j)$ $M(n)$ 表示 $n$ 的最小质因子 $[exp]$ 当表达式 $exp$ 为真时取值为 $1$,否则为 $0$ 整除 对于一个 $n$,$\lfloor \dfrac{n}{i} \rfloor$,$1 \leq i \leq n$ 只有 $O(\sqrt n)$ 种取值。 $\lfloor \dfrac{\lfloor \frac{n}{i} \rfloor}{j} \rfloor = \lfloor \dfrac{n}{ij} \rfloor$ ($1 \leq i,j \leq n$) 证明:$n=kij+c,0\leq c<ij$,那么 $\lfloor \dfrac{n}{i} \rfloor = \lfloor kj+ \dfrac{c}{i} \rfloor=kj+\lfloor \dfrac{c}{i} \rfloor$,$\lfloor \dfrac{c}{i} \rfloor < j$,所以 $\lfloor \dfrac{\lfloor \frac{n}{i} \rfloor}{j}

剑指offer-不用加减乘除做加法

梦想与她 提交于 2020-02-01 12:16:08
问题描述: 写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。 源码: class Solution { public: int Add(int num1, int num2) { int sum, carry; do{ sum = num1 ^ num2; carry = (num1 & num2)<<1; num1 = sum; num2 = carry; }while(carry!=0); return sum; } }; 来源: CSDN 作者: 凡凡.cs 链接: https://blog.csdn.net/fanyuwgy/article/details/104130554

数论函数前缀和合集

帅比萌擦擦* 提交于 2020-01-30 01:25:19
01 - \(\sum\limits_{i=1}^{n} [gcd(i,m)=1]\) 索引:n以内与m互质的数的个数 求: \(\sum\limits_{i=1}^{n} [gcd(i,m)=1]\) 由 \(\sum\limits_{d|n}\mu(d)=[n=1]\) 得 \(\sum\limits_{i=1}^{n} \sum\limits_{d|gcd(i,m)}\mu(d)\) 交换求和顺序,得 \(\sum\limits_{d|m}\mu(d)\lfloor\frac{n}{d}\rfloor\) 注意到当d有平方因子的时候 \(\mu(d)=0\) ,那么求出 \(m\) 的所有的质因子然后容斥(其实莫比乌斯函数本身就代表容斥) 64位整数范围内的质因子不到20种,容斥的复杂度不超过1e6单次。 当n与m相等时, \(\varphi(n)=\sum\limits_{i=1}^{n} [gcd(i,n)=1]\) ,为欧拉函数的定义。 来源: https://www.cnblogs.com/KisekiPurin2019/p/12241952.html

js函数实现递归自调用的方法

夙愿已清 提交于 2020-01-25 05:43:35
js函数的递归调用方法 1.通过函数自身名字递归调用 function sum(num){ if(num<=1){ return 1; }else{ return num+sum(num-1); } } console.log(sum(5));//15 这种通过函数名字调用自身的方式存在一个问题:函数的名字是一个指向函数对象的指针,如果我们把函数的名字与函数对象本身的指向关系断开,这种方式运行时将出现错误。 2.通过arguments.callee调用函数自身 function sum(num){ if(num<=1){ return 1; }else{ return num+arguments.callee(num-1); } } console.log(sum(5));//15 var sumAnother=sum; console.log(sumAnother(5));//15 sum=null; console.log(sumAnother(5));//15 这种方式很好的解决了函数名指向变更时导致递归调用时找不到自身的问题。但是这种方式也不是很完美,因为在严格模式下是禁止使用arguments.callee的。 3.通过函数命名表达式来实现arguments.callee的效果。 var sum=(function(){ 'use strict' return