筛法求素数与欧拉函数
来源:互联网 发布:erp沙盘软件 编辑:程序博客网 时间:2024/06/01 10:41
问题:求小于等于n的素数个数
一般方法:从1~n都使用for循环判断是否为素数,时间复杂度为O(n2),纵然优化后,在每一个for循环中取n=sqrt(n)判断,仍然会是O(3/2)的复杂度。为了将算法优化到线性级别,考虑使用辅助数组。
思路如下:设置2~n的for循环,定义check数组,初始值为0。遍历过程中,若某数为i的整倍数(如4为2的两倍,6为2的3倍),则设置check标记值为1,表示非素数。(普通筛选法--埃拉托斯特尼筛法)
优化:在埃氏筛法中,会有数字被重复标记。此处引入欧拉算法。
参考:http://www.cnblogs.com/grubbyskyer/p/3852421.html
#include<cstdio>#include<cstring>#include <iostream>using namespace std;#define MAXN 100005#define MAXL 1299710int prime[MAXN];int check[MAXL];int main(){int tot = 0;memset(check, 0, sizeof(check));for (int i = 2; i < MAXL; ++i){ if (!check[i]) { prime[tot++] = i; } for (int j = 0; j < tot; ++j) { if (i * prime[j] > MAXL) { break; } check[i*prime[j]] = 1; if (i % prime[j] == 0) { break; } } } int n; while(cin>>n) { int start=0; int number=0; while(prime[start]<=n) { //cout<<"test"<<prime[start]<<endl; start++; number++; } cout<<number<<endl; }}
欧拉函数:在数论,对正整数n,欧拉函数是小于或等于n的数中与n互质的数的数目。例如φ(8)=4,因为1,3,5,7均和8互质。
仍然参考上述链接中的代码:
1 #include<cstdio> 2 #include<cstring> 3 #define MAXN 100005 4 #define MAXL 1299710 5 int prime[MAXN]; 6 int check[MAXL]; 7 int phi[MAXL]; 8 int tot = 0; 9 phi[1] = 1;10 memset(check, 0, sizeof(check));11 for (int i = 2; i < MAXL; ++i)12 {13 if (!check[i])14 {15 prime[tot++] = i;16 phi[i] = i - 1;17 }18 for (int j = 0; j < tot; ++j)19 {20 if (i * prime[j] > MAXL)21 {22 break;23 }24 check[i*prime[j]] = 1;25 if (i % prime[j] == 0)26 {27 phi[i*prime[j]] = phi[i] * prime[j];28 break;29 }else30 {31 phi[i*prime[j]] = phi[i] * (prime[j]-1);32 }33 }34 }
阅读全文
0 0
- 筛法求素数与欧拉函数
- 欧拉函数求法与欧拉筛法求素数
- 【数论】【素数】素数相关基础——欧拉函数与欧拉定理
- 欧拉函数筛选素数
- POJ2478 Farey Sequence 欧拉函数与素数 数论题
- 筛法求素数+分解质因子+欧拉函数+求约数
- 欧拉函数 + 约数 + 素数表 + 欧拉函数表
- 素数 约数 欧拉函数 筛法
- POJ 2773 欧拉函数, 素数表
- csu(欧拉函数+筛素数)
- 欧拉函数 素数筛选法模板
- 欧拉函数o(n)求素数
- Lightoj1007【欧拉函数-素数表】
- 线性筛素数and欧拉函数
- 欧拉线性筛法求素数
- 欧拉线性筛法求素数(顺便实现欧拉函数的求值)
- 欧拉线性筛法求素数(顺便实现欧拉函数的求值)
- 欧拉线性筛法求素数(顺便实现欧拉函数的求值)
- Servlet
- POSTMAN接口测试工具介绍
- java day08_day09基础梳理
- MongoDB (五):安全浅析
- MBR主引导扇区上,0扇区,512个字节,(主引导区一般在C盘,记录整个硬盘的情况;多系统其他盘也有引导区)
- 筛法求素数与欧拉函数
- 【bzoj1598】【 [Usaco2008 Mar]牛跑步】启发式搜索思路+spfa
- 移植u-boot-2012.04----建立单板_修改时钟_
- cookie设置24小时
- MongoDB (六):高级命令操作与实操
- 月薪五万的程序员是什么样的?
- 程序员看见喜欢的人
- 天冷了,码哥急需陪睡!
- fancybox关闭弹出窗体parent.$.fancybox.close();