1.构造素数表,不能被所有素数整出的数就是素数
//--输出前50个素数
int cnt = 1;
int[] prime = new int[50];
prime[0] = 2;
Mark:
for(int xxx = 3;cnt < 50;xxx++)
{
for(int i = 0;i < cnt;i++)
{
if(xxx % prime[i] == 0)
{
continue Mark;
}
}
prime[cnt] = xxx;
cnt++;
}
for(int k : prime)
{
System.out.print(k+" ");
}
2.素数倍数标记,丢掉,剩下的就是素数
由于一定范围内素数本身比非素数少得多,因此标记并丢掉素数的倍数效率比较高。
//素数倍数标记,素数的倍数丢掉,剩下的就是素数,更快!
boolean [] isPre = new boolean [101];//输出100以内的素数
for(int i = 0;i < isPre.length;i++) {
isPre[i] = true;//一开始假设都是素数,遇到不是素数的标记为false
}
for(int i = 2;i < isPre.length;i++)
{
if(isPre[i])
{
for(int j =2;j*i <= 100;j++)
{
isPre[i*j] = false;
}
}
}
for(int i = 0;i < isPre.length;i++)
{
if(isPre[i])
{
System.out.print(i+" ");
}
}
本文介绍了两种寻找素数的方法:一种是通过构造素数表,逐个检查每个数是否能被已知素数整除;另一种是使用素数倍数标记法,快速标记并剔除非素数,从而提高查找效率。展示了如何用Java实现这两种算法,并输出前100以内的素数。
4155

被折叠的 条评论
为什么被折叠?



