C/C++ C++ : Program that gives u the prime factors

AI Thread Summary
The discussion centers around creating a C++ program to display the prime factors of a given number. The initial code provided successfully displays all factors but does not isolate prime factors. A revised approach using a while loop within a for loop is suggested to achieve the desired output. Additionally, it is noted that the program can be optimized by only checking integers up to the square root of the input number, as any factors larger than this will have corresponding smaller factors. The conversation also highlights that unnecessary checks for even numbers and multiples can be avoided, improving efficiency while keeping the code manageable.
aleee
Messages
17
Reaction score
0
i need help making a program that only displays the prime factors
ex: 100 = 2*2*5*5

i got the program to display all the factors but after that I am lost.

here is the code so far
oh its in C++

#include <iostream>

using namespace std;

int main()
{
cout << "Enter a number: ";
int num;
cin >> num;
int i,k = 0;

for (int i=2; i <= num; i++)
{
if( num % i == 0)
{
if(num % i == 0)
{
k = num / i;
}
cout << i << " " << k << endl;
}
}
return 0;
}
 
Technology news on Phys.org
Try to do this slightly differently:

Code:
#include <iostream>

using namespace std;

int main()
{
cout << "Enter a number: ";
int num;
cin >> num;

for (int i=2; i <= num; i++)
{
 while(num % i == 0)
 {
   num /= i;
   cout << i << " ";
 }
}
cout << endl;
return 0;
}
 
Last edited:
any certain direction i should go in?
 
I don't understand your question.
 
im not sure on how to go about changing it. any advice?
 
Do you see the code in my post?
 
oh sorry my mistake. i ended up doing a while loop then a for loop inside, but thank you for the help
 
Something to keep in mind is that you don't have to check all of the integers from 2 to num. It is sufficient to go up to sqrt(num) - or the largest integer greater than or equal to sqrt(num). The idea is that if num has a factor smaller than sqrt(num), then there will be one larger than sqrt(num) as well.

For example, suppose num is 85. All you need to do is check the integers from 2 though 9.

Check 2 - not a divisor.
Check 3 - not a divisor.
Check 4 - not a divisor.
Check 5 - is a divisor. (The other divisor is 17.)
Check 6 - not a divisor.
Check 7 - not a divisor.
Check 8 - not a divisor.
Check 9 - not a divisor.

FYI, you don't actually need to check 4, 6, 8, 10, etc. If 2 is not a divisor, then no other even integer will be a divisor. The same is true for 6, 9, 12, etc. If 3 isn't a divisor, then neither will any other multiple 3 be a divisor. There are lots of ways to make the program more efficient, but they add complexity to the code.
 

Similar threads

Back
Top