快速判断素数算法
来源:互联网 发布:淘宝技术这10年 pdf 编辑:程序博客网 时间:2024/03/29 18:09
引理:如果 a 是一个大于1的整数,而所有小于或等于根号 a 的素数都除不尽a ,则 a 是素数。
理想的判断素数的方法应该是将所有小于或等于根号n的素数去除n,但是n是一个随机大于1的整数,小于这个数的平方根的素数表不好给定。下面介绍的方法,本意是动态的构建素数表,但是引入了很多冗余的除数。
代码:
分析:
相对于sqrt(n)次除,上面的程序需要sqrt(n)*8/30次除,效率提升了15/4倍。
自然数n,我们假设小于n的素数数F(n),F(n)的分布规律为:当n趋向于无穷大时,F(n)/(x/logx) = 1;
所以,动态的冗余度近似为:(sqrt(n)*4/15-x/logx)/sqrt(n)*4/15
其他更好的判断素数的算法,希望你能给我留言或者写在评论上,谢谢!
理想的判断素数的方法应该是将所有小于或等于根号n的素数去除n,但是n是一个随机大于1的整数,小于这个数的平方根的素数表不好给定。下面介绍的方法,本意是动态的构建素数表,但是引入了很多冗余的除数。
代码:
bool prime (int num)
{
if (num == 2 || num == 3 || num == 5)
return true;
if (num % 2 == 0 || num % 3 == 0 || num % 5 == 0 || num == 1)
return false;
unsigned long c = 7;
int maxc = int (sqrt (num));
while (c <= maxc)
{
if (num % c == 0)
return false;
c += 4;
if (num % c == 0)
return false;
c += 2;
if (num % c == 0)
return false;
c += 4;
if (num % c == 0)
return false;
c += 2;
if (num % c == 0)
return false;
c += 4;
if (num % c == 0)
return false;
c += 6;
if (num % c == 0)
return false;
c += 2;
if (num % c == 0)
return false;
c += 6;
}
return true;
}
{
if (num == 2 || num == 3 || num == 5)
return true;
if (num % 2 == 0 || num % 3 == 0 || num % 5 == 0 || num == 1)
return false;
unsigned long c = 7;
int maxc = int (sqrt (num));
while (c <= maxc)
{
if (num % c == 0)
return false;
c += 4;
if (num % c == 0)
return false;
c += 2;
if (num % c == 0)
return false;
c += 4;
if (num % c == 0)
return false;
c += 2;
if (num % c == 0)
return false;
c += 4;
if (num % c == 0)
return false;
c += 6;
if (num % c == 0)
return false;
c += 2;
if (num % c == 0)
return false;
c += 6;
}
return true;
}
分析:
相对于sqrt(n)次除,上面的程序需要sqrt(n)*8/30次除,效率提升了15/4倍。
自然数n,我们假设小于n的素数数F(n),F(n)的分布规律为:当n趋向于无穷大时,F(n)/(x/logx) = 1;
所以,动态的冗余度近似为:(sqrt(n)*4/15-x/logx)/sqrt(n)*4/15
其他更好的判断素数的算法,希望你能给我留言或者写在评论上,谢谢!
- 快速判断素数算法
- 快速判断素数
- NYOJ187快速判断素数
- 快速判断素数
- 快速判断素数
- 判断素数的算法
- 判断素数的算法
- 判断素数的算法
- 判断素数的算法
- 素数判断算法-----应用
- 素数判断算法
- 判断素数的算法
- 判断素数的算法
- 素数判断算法 高效率
- 常识算法--素数判断
- 素数判断算法
- 判断素数的算法
- 判断素数算法
- C++第5周项目4 - 指针操作学生类
- 应用程序第一次登入
- VRML---第四章第四部分(光照效果)
- POJ 2104.K-th Number
- [leetcode]Simplify Path
- 快速判断素数算法
- Python学习笔记(五)
- arm处理器裸机开发实战——学习笔记1
- Hugepages的前世今生 (七)
- audio--waveOutGetNumDevs与mixerGetNumDevs
- Oracle服务进程如何处理用户进程的请求
- Android安全——Activity劫持
- Fast implementation/approximation of pow() function in C/C++
- 累进战术的应用