473,854 Members | 1,834 Online

# Find prime numbers from a given number

1 New Member
Hi, can someone send me the algorithm for finding the products of prime numbers from a given number?

Thank You

Gary.
Oct 24 '06 #1
11 46443
arne
315 Recognized Expert Contributor
Hi, can someone send me the algorithm for finding the products of prime numbers from a given number?

Thank You

Gary.
One possible algorithm would work like this:

Expand|Select|Wrap|Line Numbers
1. start with d = 2 and num = given number
2. repeat
3.    check if your num is divisible by d
4.    if yes
5.         print out d and divide num by d
6.    if no
7.         increase d by one
8. while ( d is smaller than half the given number and num is unequal 1 )
9.
Oct 24 '06 #2
Banfa
9,065 Recognized Expert Moderator Expert
Expand|Select|Wrap|Line Numbers
1. start with d = 2 and num = given number
2. repeat
3.    check if your num is divisible by d
4.    if yes
5.         print out d and divide num by d
6.    if no
7.         increase d by one
8. while ( d is smaller than half the given number and num is unequal 1 )
9.
This routine could be optomised to in the following ways to run faster

1. Take account of 2 being the only even prime number, don't bother checking 4, 6, 8 etc.

2. Change while condition to

while ( d is smaller than the square root of the given number and num is unequal 1 )

If the stop condition is (d is greater than the square root of the given number) rather than (num is equal 1) the num will be unequal 1 and will be a prime divisor of the given num. (Try with the input 15)

3. This algorithm tests all numbers, if the given number is very large and has at least 1 large prime divisor then it will be in efficient because it will be testing lots of non-prime numbers that can not possible be prime divisors of the given number.

I wonder but don't know if this may be more efficient

Expand|Select|Wrap|Line Numbers
1. FUNCTION GetPrimeDivisors( Number )
2.
3.   Test = The Square Root Of Number
4.
5.   WHILE(Test Not Equal To 1)
6.     CHECK if your number is divisible by Test
7.
8.     IF yes
9.       end loop
10.     ELSE IF no
11.       test = test - 1
12.     END IF
13.   END WHILE
14.
15.   IF Test Equal To 1
16.     Print Number
17.   ELSE IF Test Not Equal To 1
18.     CALL GetPrimeDivisors( Test )
19.     CALL GetPrimeDivisors( Number/Test )
20.   END IF
21. END FUNCTION
22.
Hmm think I will just make sure this works
Oct 24 '06 #3
Banfa
9,065 Recognized Expert Moderator Expert
Well it does work but I still have no idea how efficient it is or isn't
Oct 24 '06 #4
mukesh verma
1 New Member
check a prime number program written in c language ............
<code snipped>
////////////////////////////////////////////////////////////////////////////////////////////////////////////////
hi My name is mukesh, i am red tech web devloper, well red tech is a group of IT engineers, For any query related to programming write at us : <email snipped> or <email snipped>. our web site providing a large collection of programs but write now its under construction. plz keep visiting this site.
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
Apr 30 '07 #5
Savage
1,764 Recognized Expert Top Contributor
Hi, mukesh would u please read posting guidelines and especialy the part How to Respond to a Question.

Savage
Apr 30 '07 #6
Savage
1,764 Recognized Expert Top Contributor
Well it does work but I still have no idea how efficient it is or isn't
I do think this will be even more efficient:

Expand|Select|Wrap|Line Numbers
1. for(first counter starts with num;first counter>=3,which is first prime;firstcounte--)
2. {
3.     //Here we need some type of pointer if it's 0 then number is a prime e.g
4.       test=0
5.
6.       for(sec counter=2;sec counter<first counter;sec counter++) if moduo of
7.       first counter and secound counter is 0, test=1;
8.
9.       if test is 0 output the number;
10.
11. }
Savage
Apr 30 '07 #7
Ganon11
3,652 Recognized Expert Specialist
I wonder but don't know if this may be more efficient

Expand|Select|Wrap|Line Numbers
1. FUNCTION GetPrimeDivisors( Number )
2.
3.   Test = The Square Root Of Number
4.
5.   WHILE(Test Not Equal To 1)
6.     CHECK if your number is divisible by Test
7.
8.     IF yes
9.       end loop
10.     ELSE IF no
11.       test = test - 1
12.     END IF
13.   END WHILE
14.
15.   IF Test Equal To 1
16.     Print Number
17.   ELSE IF Test Not Equal To 1
18.     CALL GetPrimeDivisors( Test )
19.     CALL GetPrimeDivisors( Number/Test )
20.   END IF
21. END FUNCTION
22.
Erm...does it work?

Test starts as the square root of a number, and then you test that Test != 1. The only change you are making to Test is Test -= 1. (actually, you write test = test - 1...same thing functionally). Suppose Number is not a perfect square, like 15. Then the square root of Number is some decimal (here, between 3 and 4), and will never equal 1.

Unless you're depending on the square root operation to truncate Test to an integer...
Apr 30 '07 #8
JosAH
11,448 Recognized Expert MVP
Except for 2 and 3 you only have to test for multiples of 6 plus or minus 1.
Until a potential divisor squared is larger than the number to be tested.

kind regards,

Jos
Apr 30 '07 #9
Banfa
9,065 Recognized Expert Moderator Expert
Unless you're depending on the square root operation to truncate Test to an integer...
OK just wait 6 months and _then_ pick at my pseudo code :p

Actually since divisor have to be integers I was assuming integer arithmatic in the routine but I should have stated it.
Apr 30 '07 #10