DEV Community

221910304057VIVEK
221910304057VIVEK

Posted on

Prime Numbers

To find prime numbers in a fast and efficient way in O(sqrt(n)) time complexity.

To check prime numbers efficiently any number is a prime number if it is not divisible by any number less than or equal to the square root of the given number.

First we take an input n to check whether it is prime or not.
then the number is checked whether it is a valid number or not as numbers less than or equal to 1 are not prime in which case our function prime return -1 .

Then divisibility by 2 or 3 is checked ,if it is divisible by 2 or 3 then 0 is returned.

Then we check for all numbers below square root of the given number if it is divisible or not.
To check that more efficiently we iterate the variable i starting from 5 and increment it by 6 and we check it is divisible by i and i+2 if it is then 0 is returned else the given number is a prime number.

This program checks for prime numbers in o(sqrt(n)) time complexity.

import java.util.*;
public class Prime {
    static int prime(int n){
        if(n<=1){
            return -1;
        }
        if(n==2||n==3){
            return 1;
        }
        if(n%2==0||n%3==0){
            return 0;
        }
        for(int i=5;i*i<=n;i=i+6){
            if(n%i==0||n%(i+2)==0){
                return 0;
            }
        }
        return 1;
    }
    public static void main(String args[]) {
        Scanner sc=new Scanner(System.in);
        int n,r ;
        System.out.println("Enter the number to check");
        n=sc.nextInt();
        r=prime(n);
        System.out.println(r);
        if(r==-1){
        System.out.println("Please enter a valid number");
        }
        else if(r==0){
            System.out.println(""+n+" is not a prime number");
        }
        else{
            System.out.println("It is a prime number");
        }
    }
}
Enter fullscreen mode Exit fullscreen mode

Top comments (6)

Collapse
 
hatheadninja profile image
Unfamous Dyson • • Edited

Thanks for this! This was one of my favourite challenges in that it was the first challenge I completed where the solution came from researching math rather than code. The purpose of the challenge was a little different in that you have to optimize the prime number check for performance, as the tests purposely timed out on big numbers: codewars.com/kata/5262119038c0985a...

Here is the code I wrote after researching the math for finding prime numbers:
github.com/HatHeadNinja/katas/blob...

Collapse
 
samarthp profile image
Samarth Pusalkar •

Awesome idea but wont it print "Please enter a valid number" sqrt(n)/6 times because print statement is in the loop.

Collapse
 
221910304057vivek profile image
221910304057VIVEK •

sorry about that, it has been changed.

Collapse
 
221910304057vivek profile image
221910304057VIVEK •

The post has been edited and that unnecessary statement is removed.

Collapse
 
mustabelmo profile image
Mustapha Belmokhtar •

awesome but as far as I know, it would be great if your methods returns a boolean value. any positive number can be either prime or not prime

Collapse
 
221910304057vivek profile image
221910304057VIVEK •

Yes ,I thought of that but the user may input any number so this function checks for all input integers.