12,395,645 members (57,450 online)
Tip/Trick
Add your own
alternative version

9.7K views
3 bookmarked
Posted

# Prime Number Test

, 9 Jun 2010 CPOL
 Rate this:
Please Sign up or sign in to vote.
Tests For a Prime Number
Introduction

I've tried to harness C's speed and an efficient algorithm for prime number testing
Background

What you need to know is 2 facts.

1. If the number can be factored into two numbers, at least one of them should be less than or equal to its square root.
2. Every prime number can be represented by the form 6k+1 or 6k-1

Explanation
The two facts I just mentioned are converted to code here.

```#include <stdio.h>

#include <math.h>

main()
{
unsigned long int testno;
unsigned long int i=0;
unsigned long int testsqrt;
printf("Enter number for checking : \n");
scanf("%lu",&testno);
if(testno==2||testno==3){
printf("\nPrime");
getch();
exit();}
if(((testno+1)%6==0)||(((testno-1)%6)==0)||(testno%2!=0)||(testno%3!=0))
{
testsqrt=ceil(sqrt(testno));
for(i=5;i<=testsqrt;i++)
{
if(i%2==0||i%3==0)
continue;
if(testno%i==0)
{
printf("\nNot Prime");
getch();
exit();
}
}
}
else
{
printf("\nNot Prime");
getch();
exit();
}
printf("\nPrime");
getch();

}
```
First, it checks if the number is 2 or 3 and if it is one of them, it prints that the number is prime.

The line

`if(((testno+1)%6==0)||(((testno-1)%6)==0)||(testno%2!=0)||(testno%3!=0)) `

filters out a majority of the non-prime numbers.

First, it tests if the number can be represented by the form 6k+1 or 6k-1 and then if it is a multiple of 2 or 3.

If it can be represented in either of the forms(6k+1 or 6k-1), then it proceeds to the checking loop.

If the condition fails, the program exits after printing "Not Prime".

Then, testsqrt stores the square root of testno(the number the user inputs).

The loop counter i starts from 5 (2 and 3 have been already checked. Every multiple of 4 is divisible by 2 which has already been checked too).

Then, the counter is checked if it is even or if it is a multiple of 3. If it is either, then the the program proceeds to the next iteration.

Then, the program checks if testno is a multiple of the current number(counter).

If it is, then the program prints "Not Prime".

If no number divides testno, finally, the program prints that the number is prime and exits.

## License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)

## About the Author

 Student India
No Biography provided

## Comments and Discussions

 First Prev Next
 Why check for multiples of 2 or 3 supercat910-Jun-10 6:01 supercat9 10-Jun-10 6:01
 Re: Why check for multiples of 2 or 3 pranav9510-Jun-10 6:02 pranav95 10-Jun-10 6:02
 Last Visit: 31-Dec-99 18:00     Last Update: 23-Jul-16 23:34 Refresh 1

General    News    Suggestion    Question    Bug    Answer    Joke    Praise    Rant    Admin

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.

| Advertise | Privacy | Terms of Use | Mobile
Web02 | 2.8.160721.1 | Last Updated 10 Jun 2010
Article Copyright 2010 by Anshul R
Everything else Copyright © CodeProject, 1999-2016
Layout: fixed | fluid