判断素数的算法
来源:互联网 发布:怎么删掉爱淘宝 编辑:程序博客网 时间:2024/04/26 13:03
判断素数的算法
http://www.cppblog.com/amazon/archive/2009/06/20/88107.asp
这是一个基本的算法编程问题,即给定一个整数x,判断x是否为素数。算法基本思路如下:让x被2到sqrt(x)除,如果x能被2至sqrt(x)之中任何一个整数整除,那么说明x不是质数,否则是质数。原因不再说明,具体代码如下:
#include <cmath>
bool IsPrime(int x)
{
for(int i = 2; i <= (int)sqrt(x); i++)
{
if((x % i) == 0)
return false;
}
return true;
}
bool IsPrime(int x)
{
for(int i = 2; i <= (int)sqrt(x); i++)
{
if((x % i) == 0)
return false;
}
return true;
}
继续引申,从1开始的连续整数中哪些为素数?可以使用“筛选法”。所谓“筛选法”指的是“埃拉托色尼(Eratosthenes)筛法”。他是古希腊的著名数学家。他采取的方法是,在一张纸上写上1到100全部整数,然后逐个判断它们是否是素数,找出一个非素数,就把它挖掉,最后剩下的就是素数。具体做法如下:
<1> 先将1挖掉(因为1不是素数)。
<2> 用2去除它后面的各个数,把能被2整除的数挖掉,即把2的倍数挖掉。
<3> 用3去除它后面的各数,把3的倍数挖掉。
<4> 分别用4、5…各数作为除数去除这些数以后的各数。这个过程一直进行到在除数后面的数已全被挖掉为止。例如找1~50的素数,要一直进行到除数为47为止(事实上,可以简化,如果需要找1~n范围内素数表,只需进行到除数为n^2(根号n),取其整数即可。例如对1~50,只需进行到将50^2作为除数即可。)
如上算法可表示为:
#include <iostream>
#include <cmath>
//#include "Prime.h"
int main()
{
int array[101];
int i, j;
for(i = 2; i <= 100; i++)
array[i] = i;
for(i = 2; i < (int)sqrt(100); i++)
{
if(array[i] != 0)
{
for(j = i + 1; j <= 100; j++)
{
if((array[j] != 0) && (array[j] % array[i] == 0))
{
array[j] = 0;
}
}
}
}
for(i = 2; i <= 100; i++)
{
if(array[i] != 0)
std::cout << array[i] << std::endl;
}
return 0;
}
#include <cmath>
//#include "Prime.h"
int main()
{
int array[101];
int i, j;
for(i = 2; i <= 100; i++)
array[i] = i;
for(i = 2; i < (int)sqrt(100); i++)
{
if(array[i] != 0)
{
for(j = i + 1; j <= 100; j++)
{
if((array[j] != 0) && (array[j] % array[i] == 0))
{
array[j] = 0;
}
}
}
}
for(i = 2; i <= 100; i++)
{
if(array[i] != 0)
std::cout << array[i] << std::endl;
}
return 0;
}
上述的筛选法的时间复杂度为O(sqrt(n)*n),效果不够理想。
- 判断素数的算法
- 判断素数的算法
- 判断素数的算法
- 判断素数的算法
- 判断素数的算法
- 判断素数的算法
- 判断素数的算法
- 判断素数的算法
- 高效判断素数的算法
- 判断素数算法的改进
- 自己判断素数的一个算法
- java之简单的判断素数算法
- miller_rabin素数判断和pollard_rho的素数因子分解算法
- 素数判断算法-----应用
- 素数判断算法
- 快速判断素数算法
- 素数判断算法 高效率
- 常识算法--素数判断
- 拷贝RandomList
- as3自定义日历
- Android图片异步加载的方法zz
- XNA超级玛丽
- 解决 IE 选项卡重启的问题(此选项卡已经恢复)
- 判断素数的算法
- Android高效加载大图、多图解决方案,有效避免程序OOM
- Bad version number in .class file【异常处理】
- (李嘉诚)教五年内买车买房——理财篇
- struts2 所有常量配置详解
- Metrics and Grids
- AsyncTask的用法
- 做题引发的内存思考问题-poj 2942
- Java中String类hashCode()和equals()问题