1 #include 2 #include 3 using namespace std; 4 int num[100000]; 5 long long prime[5000001]; 6 bool is_prime[10000001]; 7 int N,M; 8 int cnt=1; 9 int m... ...
分类:
其他好文 时间:
2017-12-09 18:07:48
阅读次数:
165
请你想出一个算法求出n以内(含n)的所有素数,要求算法的时间复杂度越小越好。 这里介绍一种算法——快速线性素数筛法(欧拉筛法),时间复杂度O(n)。 诀窍在于:筛除合数时,保证每个合数只会被它的最小质因数筛去。因此每个数只会被标记一次,所以算法时间复杂度为O(n)。 具体请看下面的代码,主要函数是P ...
分类:
其他好文 时间:
2017-11-11 00:38:24
阅读次数:
198
质数(素数):指大于1的所有自然数中,除了1和自身,不能被其它自然数整除的数 合数:比1大,但不是素数的数称为合数,合数除了被1和自身整除,还能被其它数整除 质因数(素因数或质因子):能整除给定正整数的质数,除1以外,两个没有其它共同质因子的正整数称为互质 1和0既非素数又非合数 素数筛法原理:素数 ...
分类:
其他好文 时间:
2017-08-19 11:12:25
阅读次数:
162
相关逆元求法,我之前有写过,还有欧拉函数的求法,欧拉函数与逆元的关系 点击POJ 2478又是一个打表的题目,一眼看出结果就是前n个欧拉函数值的和。这里直接计算欧拉函数值求和会超时,看见多组数据。然后就是计算欧拉函数,打表就好了。#include #include #include using na... ...
分类:
其他好文 时间:
2017-07-24 00:01:19
阅读次数:
258
欧拉筛法求素数 首先,我们知道当一个数为素数的时候,它的倍数肯定不是素数。所以我们可以从2开始通过乘积筛掉所有的合数。 将所有合数标记,保证不被重复筛除,时间复杂度为O(n)。代码比较简单↓_↓ if(i % prime[j] == 0) break;←_←这一步比较难理解解释: 首先,任何合数都能 ...
分类:
其他好文 时间:
2016-11-06 02:50:01
阅读次数:
109
时间复杂度O(n)当n比较大时欧拉筛法所用的时间比O(nloglogn)的算法的时间少的会越来越明显 为什么呢? 因为在欧拉筛法中,每一个合数只被访问并将其所对的f[]的值修改了一次。 ...
分类:
其他好文 时间:
2016-09-25 17:32:20
阅读次数:
201
题意: 就是求2~n的所有欧拉函数值的和,这里就用到了快速求欧拉函数的方法。(不能暴力求了,不然必定TLE啊) 说说欧拉筛法,感觉十分机智啊~~ 对于上述代码的几个问题: 1.问:为什么i%prime==0时break? 答:欧拉筛法每次合成时都是用最小质因子合成的,如果我们在程序加一行记录,即可先
分类:
其他好文 时间:
2016-02-04 18:40:33
阅读次数:
235
判断a是否为素数,求1——n的素数个数考虑欧拉筛法———— http://wenku.baidu.com/link?url=dFs00TAw8_k46aeSbXy5nB5LVqJ51uUJgY9zVWEDQdwjLN-qLFWZuYcGPE5EDcztNQAMtKfUbSseBvfBzV4fcQv....
分类:
其他好文 时间:
2015-12-16 17:22:31
阅读次数:
174
1 #include 2 using namespace std; 3 const int N = 200; 4 int prime[N], e[N], d[N], tot, phi[N]; 5 bool not_p[N]; 6 inline void pre(){ 7 not_p[1] ...
分类:
其他好文 时间:
2015-11-03 21:08:40
阅读次数:
399