美文网首页程序员简书面面观Coding
Java中判断素数的五种方法

Java中判断素数的五种方法

作者: AaronYu__ | 来源:发表于2019-01-21 17:02 被阅读17次

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<x; i +=2)
    {
        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 个素数

判断是否能被已知的的且 <x 的素数整除
这个方法可扩展性很强,建议掌握。

int [] primes = new int[50];
primes[0] =2;
int cnt =1;
Main:
for(int x= 3; cnt<primes.length; x++)
{
    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 以内的素数表

原理:

  1. 令 x =2;
  2. 将 2x、3x、4x 直至 ax<n 的数标记为非素数
  3. 令 x 为下一个没有被标记为非素数的数,重复 2;直至所有的数都已尝试完毕。
boolean[] isPrime = new boolean[100];
for( int i =2; i< isPrime.length; i++)
{
    isPrime[i] = true;
}
for(int i =2; i<isPrime.length; i++)
{
    if( isPrime [i])
    {
        for(int k=2; i*k < isPrime.length; k++)
        {
            isPrime[i*k] = false;
        }
    }
}
for( int i = 0; i<isPrime.length; i++)
{
    if(isPrime[i])
    {
        System.out.print(i+ " ");
    }
}

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

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

相关文章

  • Java中判断素数的五种方法

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

  • Java案例-判断随机整数是否是素数

    Java案例-判断随机整数是否是素数 判断随机整数是否是素数 产生 100 个0-999 之间的随机整数,然后判断...

  • 筛法

    素数表的获取 从1~n进行枚举,判断每个数是否是素数,如果是素数则加入素数表,这种方法的枚举部分的复杂度是O(n)...

  • 实现Math.sqrt

    开发中有时候需要进行求根运算(比如判断整数是不是素数), 在Java中调用Math.sqrt()即可, 这个方法是...

  • B1007 素数对猜想 (20分)

    /*题意:1、找出素数对,素数对就是,相邻两个素数差为2的素数 解题:1、判断是不是素数函数2、判断i和i+2是不...

  • 2019-10-17_任一整数素数乘积分解练习

    任一整数素数乘积分解练习1.概述1.1 PrimeDecision1.1.1 素数判断/*** 素数判断** @p...

  • PTA BASIC 1007.素数对猜想

    原题目链接 题解 素数判断是常见的一个函数,我写的isprime函数应该是判断素数中复杂度较小的了,对要判断的数进...

  • python 判断1-100内的素数

    。。。。 判断1-100内的素数,第一个for循环是要判断的素数的范围,第二个for循环是判断该数是否为素数

  • Pseudoprime numbers

    判断伪素数

  • C语言必须要记住的经典程序

    1、/*判断101-200之间有多少个素数,并输出所有素数及素数的个数。 程序分析:判断素数的方法:用一个数分别去...

网友评论

    本文标题:Java中判断素数的五种方法

    本文链接:https://www.haomeiwen.com/subject/iiocjqtx.html