Finding Perfect Number with C++

  • C/C++
  • Thread starter Freyster98
  • Start date
  • Tags
    C++
In summary: The number you entered is a perfect number."<<ends;}else{ cout<<"The number you entered is not a perfect number."<<ends;} return 0;
  • #1
Freyster98
49
0
I am supposed to write a program to test a user-provided number to see if it is perfect. Also, I have to use a subroutine to do the test, and call to that in the main program. Finally, I must use a boolean to control the final output. I understand that it would be SO MUCH easier if I could just write a simple program to do this without the boolean and subroutine, but an assignment is an assignment. Here is what I have so far...it runs, but no matter what number I enter when running the program, it comes back as perfect. Can anyone see what I am doing wrong? Any help would be appreciated.

Code:
#include<iostream>
#include<cmath>
using namespace std;

void Perfect(int number,int&ans,bool&valid)
{
	int sum=0;
	valid=false;
	for(int i=1;i<=number/2;i++)
	{
		if(number%i==0)
			sum+=i;
	}
	if(sum==number)
		valid=true;
		ans=sum;
}

void Perfect(int,int&,bool&);
char ch;

void main()
{
	int num,answer; 
	bool found;
	cout<<"Enter the number you want to test to see if it is perfect: ";
	cin>>num;
	Perfect(num,answer,found);
	if(found=true)
	{
		cout<<num<<" is a perfect number.";
	}
	else
	{
		cout<<num<<" is NOT a perfect number.";
	}
	cin>>ch;
}
 
Technology news on Phys.org
  • #2
Code:
if(found=true)
doesn't do what you think it does!
 
  • #3
mgb_phys said:
Code:
if(found=true)
doesn't do what you think it does!

I can't tell you how many times I've gone over this and completely missed that. Thank you for taking the time to help, I really appreciate it.
 
  • #4
I can't tell you how many times I've gone over this and completely missed that.
Been there - done that - bought the Tshirt!

A good tip is to always put the constant first. eg.
if ( 2=count) or if ( true=found) then the compiler will warn you.

Even better is not to compare with true/false eg.
if (found) or if (!found) is much better.
 
Last edited:
  • #5
Alternate C++ code:
Code:
#include<iostream>
#include<cmath>
using namespace std;

bool perfect(int n)
{
	int sum=0;
	int lim = (int)sqrt(n);
	for(int i=1; i <= lim; i++)
	{
		if(n%i == 0)
			sum += i + n/i;
	}
	return sum == n;
}

void main()
{
	int num;
	cout << "Enter the number you want to test to see if it is perfect: ";
	cin >> num;
	if(perfect(num))
		cout<<num<<" is a perfect number.";
	else
		cout<<num<<" is NOT a perfect number.";
}

Alternate function perfect (replace in the above):
Code:
bool isPrime(int n) {
	if ((n&1) == 0)
		return n == 2;
	if (n%3 == 0)
		return n == 3;
	if (n < 25)
		return n > 1;
	int lim = (int)sqrt(n);
	for (int i = 5; i <= lim; i += 4)
	{
		if (n%i == 0)
			return false;
		i += 2;
		if (n%i == 0)
			return false;
	}
	return true;
}

bool perfect(int n)
{
	int s = 0;
	while ((n&1) == 0)
	{
		s++;
		n >>= 1;
	}

	if (1 << s != (n+1) >> 1)
		return false;
	return isPrime(n);
}

Alternate function perfect (replace in the above; assumes 32-bit signed ints):
Code:
bool perfect(int n)
{
	if (n > 496)
		return n == 8128 || n == 33550336;
	return n == 6 || n == 28 || n == 496;
}
 
  • #6
"Guys here is a short one if you appreciate"

#include<iostream>
#include<cmath>
using namespace std;


bool perfect(int number){
int sum=0;
bool flag=false;

for(int i=1;i<number;i++){
if(number%i==0)
sum+=i;
}

if(sum==number)
return true;
else
return false;


}


int main(){

int num;
bool q;
cout<<"Enter the number you want to test to see if it is perfect: ";
cin>>num;
q=perfect(num);
if(q)
cout<<"perfect number.\n";
else
cout<<"NOT.\n";
return 0;
}
 

What is a perfect number?

A perfect number is a positive integer that is equal to the sum of its proper divisors (positive divisors excluding the number itself), such as 6 = 1 + 2 + 3.

How can I find perfect numbers using C++?

You can find perfect numbers using C++ by writing a program that checks all numbers up to a given limit and determines if they are perfect by calculating the sum of their proper divisors.

What is the algorithm for finding perfect numbers?

The algorithm for finding perfect numbers involves iterating through all numbers up to a given limit and checking if they are perfect by calculating the sum of their proper divisors. If the sum is equal to the number, then it is a perfect number.

Can C++ handle large perfect numbers?

Yes, C++ can handle large perfect numbers as long as the data type used can store the large values. For example, using the "long long" data type can handle perfect numbers up to 9,223,372,036,854,775,807.

Are there any pre-defined functions in C++ for finding perfect numbers?

No, there are no pre-defined functions in C++ specifically for finding perfect numbers. However, there are built-in functions for calculating the sum of divisors and checking if a number is prime, which can help in finding perfect numbers.

Similar threads

  • Programming and Computer Science
Replies
15
Views
1K
  • Programming and Computer Science
Replies
12
Views
1K
  • Programming and Computer Science
Replies
1
Views
1K
  • Programming and Computer Science
Replies
22
Views
633
  • Programming and Computer Science
Replies
1
Views
1K
  • Programming and Computer Science
Replies
30
Views
2K
  • Programming and Computer Science
2
Replies
39
Views
3K
  • Programming and Computer Science
Replies
12
Views
1K
  • Programming and Computer Science
2
Replies
35
Views
2K
  • Programming and Computer Science
Replies
5
Views
2K
Back
Top