python判断素数的方法简书_Java中判断素数的五种方法

Java 中判断素数我们有很多方法,每种方法时间复杂度也不一样。今天我汇总了一下,分享给大家。既可以输出前 50 或 n 个素数,也可以判断 100 (或 n) 以内的素数。

1. 从 2 到 x-1 测试是否可以整除

Scanner in = new Scanner(System.in);

int x = in.nextInt();

boolean isPrime = true;

if ( x == 1)

{

isPrime = false;

}

for( int i = 2; i< x; i++)

{

if(x % i ==0)

{

isPrime = false;

break;

}

}

if( isPrime)

{

System.out.println(x +"是素数");

}

else

{

System.out.println(x+ "不是素数");

}

2. 去掉偶数后,从 3 到 x-1, 每次加 2

改进版,时间复杂度为 O(n/2)

if(x ==1 || x %2 ==0 && x !=2 )

{

isPrime = false;

}

else

{

for(int i =2; i

{

if( x % i == 0)

{

isPrime = false;

break;

}

}

}

if( isPrime)

{

System.out.println(x +"是素数");

}

else

{

System.out.println(x+ "不是素数");

}

3. 2 方法上的改进版,只需到 sqrt(x) 即可以

数学上可以证明,sqrt(x) 即 x 的平方根

时间复杂度为 O(sqrt(n))

if(x ==1 || x %2 ==0 && x !=2 )

{

isPrime = false;

}

else

{

for( int i =3; i< Math.sqrt(x); i+=2)

{

if( x % i == 0)

{

isPrime = false;

break;

}

}

}

if( isPrime)

{

System.out.println(x +"是素数");

}

else

{

System.out.println(x+ "不是素数");

}

4. 找出前 50 个素数

判断是否能被已知的的且

这个方法可扩展性很强,建议掌握。

int [] primes = new int[50];

primes[0] =2;

int cnt =1;

Main:

for(int x= 3; cnt

{

for(int i = 0; i< cnt; i++)

{

if( x % primes[i] == 0)

{

continue Main;

}

}

primes[cnt++] = x;

}

for ( int k: primes)

{

System.out.print(k+ " ");

}

5. 用计算机的语言去思考

构造素数表,构造 n 以内的素数表

原理:

令 x =2;

将 2x、3x、4x 直至 ax

令 x 为下一个没有被标记为非素数的数,重复 2;直至所有的数都已尝试完毕。

boolean[] isPrime = new boolean[100];

for( int i =2; i< isPrime.length; i++)

{

isPrime[i] = true;

}

for(int i =2; i

{

if( isPrime [i])

{

for(int k=2; i*k < isPrime.length; k++)

{

isPrime[i*k] = false;

}

}

}

for( int i = 0; i

{

if(isPrime[i])

{

System.out.print(i+ " ");

}

}

好了,以上便是五种判断素数的方法,第四种和第五种方法要求掌握,相信你能很快学会,一定一定要上手实操,debug 一下,你就懂了。

System.out.println("给我点个赞!");

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值