摘要:
转自http://www.cnblogs.com/suno/archive/2008/02/04/1064368.html利用积性函数的优化.这个文章主要介绍了3算法1线性时间筛素数2线性时间求前n个数的欧拉函数值3线性时间求前n个数的约数个数一、首先介绍下积性函数。下面是wiki的条目:在非数论的领域,积性函数指有对于任何a,b都有性质f(ab)=f(a)f(b)的函数。在数论中的积性函数。对于正整数n的一个算术函数f(n),当中f(1)=1且当a,b互质,f(ab)=f(a)f(b),在数论上就称它为积性函数。若某算术函数f(n)符合f(1)=1,且就算a,b不互质,f(ab)=f(a)f 阅读全文
摘要:
线性筛选法之所以称之为线性就是因为其对于每一个合数只用其最小的素因子将其筛选出来。代码如下:#include <cstdlib>#include <cstdio>#include <algorithm>#define MAXN 1000000using namespace std;int p[1000005], pri[1000005], idx = -1;void GetPrime(){ for (int i = 2; i <= MAXN; ++i) { if (!p[i]) { // 说明i是一个素数 pri[++idx] = i; ... 阅读全文
摘要:
本文转自http://blog.sina.com.cn/s/blog_694034130100wlrh.html(修改了少量有误的地方)欧拉函数:对于一个正整数n,小于n且和n互质的正整数的个数,记做:φ(n),其中φ(1)被定义为1,但是并没有任何实质的意义。特殊性质:当n为奇数时,φ(2n)=φ(n)。完全余数集合:定义小于n且和n互质的数构成的集合为Zn,称呼这个集合为n的完全余数集合。显然,对于素数p,φ(p)= p - 1.对于两个素数p、q,他们的乘积n = pq 满足φ(n) =(p-1)(q-1)证明:对于质数p,q,满足φ(n) =(p-1)(q-1)考虑n的完全余数集Zn 阅读全文
摘要:
阶乘末尾0的个数有一个题目说的是求 100 的阶乘末尾有多少个 0. 题解中给出的讲解提到, 一个数 n 的阶乘末尾有多少个 0思路:一个数 n 的阶乘末尾有多少个 0 取决于从 1 到 n 的各个数的因子中 2 和 5 的个数, 而 2 的个数是远远多余 5 的个数的, 因此求出 5 的个数即可. 题解中给出的求解因子 5 的个数的方法是用 n 不断除以 5, 直到结果为 0, 然后把中间得到的结果累加. 例如, 100/5 = 20, 20/5 = 4, 4/5 = 0, 则 1 到 100 中因子 5 的个数为 (20 + 4 + 0) = 24 个, 即 100 的阶乘末尾有 24 个 阅读全文
摘要:
阅读全文